Django學(xué)習(xí)筆記:cookies和session
Cookies:
信息在cookie里。
設(shè)置cookies

刪除和獲取cookies

其實刪除cookies說通過把過期時間設(shè)置成0(立刻過期)來實現(xiàn)
Seesion
session有賴于cookies機制而存在的,不同于Cookes,session的信息在服務(wù)器內(nèi)部
在django中說通過數(shù)據(jù)庫存儲。
cookie里存儲的說seesionid,服務(wù)器拿到sessionid后解析后才能獲取數(shù)據(jù)。
session在django項目中的配置:

session在django項目中的使用:
session在django中被封裝成字典,使用起來非常簡單,比cookies簡單很多。

session的配置:

具體來說是放在了django_seession這個表里

及時瀏覽器清除了cookie(session)或者session過期,但是服務(wù)器的session還是存在,不會主動去刪除,只有執(zhí)行python3 manage.py clearsessions才能刪除session的表中的過期數(shù)據(jù)內(nèi)容。
利用中間件,django讓session的操作變得十分簡單,但是本文作為學(xué)習(xí)筆記,有必要去探究一下sessions實現(xiàn),它是如何以來cookies進行工作的?
以登陸狀態(tài)保持(注:由于我使用的是基于django的藍鯨框架,sessionid名稱為XXX_bk_sessionid)為例:
當django中通過request.session['username']='shanshan'的時候。
1.用戶發(fā)送用戶賬號密碼到服務(wù)器,服務(wù)器驗證通過后,服務(wù)器會為該session生成一個sessionid:z60i0XXXX....XXXXjcogbf,在響應(yīng)頭里添加:Set-Cookie:sessionid=z60i0XXXX....XXXXjcogbf

2.服務(wù)器在session數(shù)據(jù)庫(或者redis)里加入一條數(shù)據(jù):z60i0XXXX....XXXXjcogbf(具體id編號),“username=shanshan”字符串的加密編碼字符串(在登陸場景中session data一般是用戶名或者用戶id等個人內(nèi)容),expire(過期時間),而后發(fā)送響應(yīng)給客戶端。

當django中通過request.session.get('username')的時候,通過以下步驟獲取用戶信息username:shanshan。
3.客戶端的下次訪問將會帶上這個cookie(sessionid=z60i0XXXX....XXXXjcogbf),服務(wù)器端自動獲取名為sessionid的cookie,取出key為sessionid的session,把session的值“z60i0XXXX....XXXXjcogbf”取出后在數(shù)據(jù)庫(或者redis)中對比,得到用戶個人信息username=“shanshan”,由django的session中間件get后返回程序。由此,服務(wù)器就知道當前服務(wù)的對象是誰并且知道服務(wù)對象的session沒有過期,那么就不用返回登陸界面,直接返回用戶請求的內(nèi)容。

以上我們以登陸為場景,結(jié)合cookie機制來具體解釋django對session的封裝原理,至此,完成了對session和cookie對基礎(chǔ)知識對學(xué)習(xí)。