(一)引入session
Session與Cookie是緊密相關(guān)的辉懒。 Session的使用要求用戶瀏覽器必須支持Cookie,如果瀏覽器不支持使用Cookie,或者設(shè)置為禁用Cookie晾剖,那么將不能使用Session励负。
Session信息對(duì)客戶來說,不同的用戶用不同的Session信息來記錄棚壁。當(dāng)用戶啟用Session時(shí)杯矩,ASP自動(dòng)產(chǎn)生一個(gè)SessionID.在新會(huì)話開始時(shí),服務(wù)器將SessionID當(dāng)做cookie存儲(chǔ)在用戶的瀏覽器中袖外。
session相比較cookie來說比較安全
我的理解:如果你是今天登陸這個(gè)網(wǎng)站(前提是你已經(jīng)注冊(cè)過這個(gè)網(wǎng)站)史隆,
然后點(diǎn)擊登陸,登陸成功的話??這行代碼會(huì)自動(dòng)生成一個(gè)cookie在刺,并且為你設(shè)置一個(gè)對(duì)應(yīng)得session.id逆害。此時(shí)當(dāng)你登陸成功的話就有兩個(gè)cookie,一個(gè)是你自己設(shè)置的,一個(gè)是系統(tǒng)自動(dòng)生成的蚣驼。
當(dāng)你再次登陸這個(gè)網(wǎng)站打開任何一個(gè)界面的時(shí)候魄幕,系統(tǒng)會(huì)自動(dòng)匹配你的sessionid,
注意:自己設(shè)置的cookie?健名一定不要和sessionid重名颖杏,這樣第二次進(jìn)入系統(tǒng)的時(shí)候纯陨,內(nèi)部會(huì)匹配不到
(二)代碼
request.session['cueernt']=username ? ? ? ? ? ?-----引入session[健]=需要記錄的內(nèi)容
print('session:%s'%request.session.get('cueernt'))----在同一個(gè)app下的其他方法里打入這句話可以獲取用戶名
(三)判斷你的session?id?是否建構(gòu)成功(寫一個(gè)判斷)
def?test01(request):
????reet?=?request.session.get('cueernt')
????if?not?reet:
????????return?redirect('/user/login')
return?render(request,?'user/success.html')
(四)引入redis
1.與其他用戶狀態(tài)保存方案比較
一般開發(fā)中用戶狀態(tài)使用session或者cookie,兩種方式各種利弊留储。
Session:在InProc模式下容易丟失翼抠,并且引起并發(fā)問題。如果使用SQLServer或者SQLServer模式又消耗了性能
Cookie則容易將一些用戶信息暴露获讳,加解密同樣也消耗了性能阴颖。
Redis采用這樣的方案解決了幾個(gè)問題,
1.Redis存取速度快丐膝。
2.用戶數(shù)據(jù)不容易丟失量愧。
3.用戶多的情況下容易支持集群钾菊。
4.能夠查看在線用戶。
5.能夠?qū)崿F(xiàn)用戶一處登錄偎肃。(通過代碼實(shí)現(xiàn)煞烫,后續(xù)介紹)
6.支持持久化。(當(dāng)然可能沒什么用)
7.相比直接在數(shù)據(jù)庫里尋找session.id要快
自己理解:因?yàn)槿绻@個(gè)網(wǎng)站在這一時(shí)刻有很大的瀏覽量累颂,每個(gè)用戶都有屬于自己的session.id滞详,如果服務(wù)器每次都在數(shù)據(jù)庫里面尋找的話會(huì)特別慢,所以直接加載到redis里面
(五)安裝redis步驟
設(shè)置redis
第一步:安裝pip?install?django-redis-sessions
第二步:配置settings.py文件
#redis緩存session
SESSION_ENGINE?=?'redis_sessions.session'
SESSION_REDIS_HOST?=?'192.168.12.18'------IP地址
SESSION_REDIS_PORT?=?6379
SESSION_REDIS_DB?=?0
SESSION_REDIS_PASSWORD?=?''----設(shè)置密碼
SESSION_REDIS_PREFIX?=?'session'
第三步:redis-cli ? ----進(jìn)入環(huán)境
如果不成功??輸入sudo?apt?install?redis-server
此時(shí)sessionID將存儲(chǔ)在redis里面
(六)隔行換色
?{% if forloop.counter|divisibleby:'2'%}style='bakegroud-color:'red';'{%endif%}
能被2整除的都變成紅色(用到了過濾器)