目錄
一、狀態保持
二、Cookoe
1.Cookie的特點
5 刪除Cookie
三、Session
1.啟動session
2.session流程
3.存儲方式
4.Session操作
Cookie
Session
二、Cookoe
Cookie,有時也用其復數形式Cookies,指某些網站為了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數據(通常經過加密)。Cookie最早是網景公司的前雇員Lou Montulli在1993年3月的發明。Cookie是由服務器端生成,發送給User-Agent(一般是浏覽器),浏覽器會將Cookie的key/value保存到某個目錄下的文本文件內,下次請求同一網站時就發送該Cookie給服務器(前提是浏覽器設置為啟用cookie)。Cookie名稱和值可以由服務器端開發自己定義,這樣服務器可以知道該用戶是否是合法用戶以及是否需要重新登錄等。服務器可以利用Cookies包含信息的任意性來篩選並經常性維護這些信息,以判斷在HTTP傳輸中的狀態。Cookies最典型記住用戶名。
Cookie是存儲在浏覽器中的一段純文本信息,建議不要存儲敏感信息如密碼,因為電腦上的浏覽器可能被其它人使用。
第一次請求過程:
第二次及以後的請求過程:
可以通過HttpResponse對象中的set_cookie方法來設置cookie。
HttpResponse.set_cookie(cookie名, value=cookie值, max_age=cookie有效期)
示例:
def cookie(request):
response = HttpResponse('ok')
response.set_cookie('itcast1', 'python1') # 臨時cookie
response.set_cookie('itcast2', 'python2', max_age=3600) # 有效期一小時
return response
可以通過HttpResponse對象的COOKIES屬性來讀取本次請求攜帶的cookie值。request.COOKIES為字典類型。
def cookie(request):
cookie1 = request.COOKIES.get('itcast1')
print(cookie1)
return HttpResponse('OK')
可以通過HttpResponse對象中的delete_cookie方法來刪除。
response.delete_cookie('itcast2')
三、Session
與cookie不同(cookie是保存在客戶端)session是保存在服務端的,session依賴於cookie,在使用session後,會在cookie中存儲一個sessionid的數據,每次請求時浏覽器都會將這個數據發給服務器,服務器在接收到sessionid後,會根據這個值找出這個請求者的Session。
Django項目默認啟用Session。
可以在settings.py文件中查看,如圖所示
如需禁用session,將上圖中的session中間件注釋掉即可。
第一次請求:
第二次及其之後的請求:
在settings.py文件中,可以設置session數據的存儲方式,可以保存在數據庫、本地緩存等。
3.1、存儲在數據庫中:
如下設置可以寫,也可以不寫,這是默認存儲方式。
SESSION_ENGINE='django.contrib.sessions.backends.db'
如果存儲在數據庫中,需要在項INSTALLED_APPS中安裝Session應用。
數據庫中的表如圖所示
表結構如下
由表結構可知,操作Session包括三個數據:鍵,值,過期時間。
3.2、存儲在本機內存中:
如果丟失則不能找回,比數據庫的方式讀寫更快。
SESSION_ENGINE='django.contrib.sessions.backends.cache'
3.3、混合存儲:
優先從本機內存中存取,如果沒有則從數據庫中存取。
SESSION_ENGINE='django.contrib.sessions.backends.cached_db'
通過HttpRequest對象的session屬性進行會話的讀寫操作。
1) 以鍵值對的格式寫session。
request.session['鍵']=值
2)根據鍵讀取值。
request.session.get('鍵',默認值)
3)清除所有session,在存儲中刪除值部分。
request.session.clear()
4)清除session數據,在存儲中刪除session的整條數據。
request.session.flush()
5)刪除session中的指定鍵及值,在存儲中只刪除某個鍵及對應的值。
del request.session['鍵']
6)設置session的有效期
request.session.set_expiry(value)