會話定義
- 從打開瀏覽器訪問一個網站,到關閉瀏覽器結束此次訪問,稱之爲一次會話
- HTTP協議是無狀態的,導致會話狀態難以保持
- 試想一下,如果不保持會話狀態,在電商網站購物的場景體驗?
-
Cookie和Session就是爲了保持會話狀態而誕生的兩個存儲技術
Cookies
cookies是保存在客戶端瀏覽器上的存儲空間
- Chrome瀏覽器可通過開發者工具的Application>>Storage>>Cookies 查看和操作瀏覽器所有的Cookies值
- 火狐瀏覽器可通過開發者工具的存儲->Cookie查看
Cookies特點
- cookies在瀏覽器上是以鍵值對的形式存儲的,鍵和值都是以ASCII字符串的形式存儲(不能是中文字符串)
- 存儲的數據帶有生命週期
- cookies中的數據是按域存儲隔離的,不同的域之間無法訪問
- cookies的內部的數據會在每次訪問此網站時都會攜帶到服務器端,如果cookies過大會降低響應速度
Cookies的使用 - 存儲
HttpResponse.set_cookie(key,value="",max_age=None,expires=None)
- key:cookie的名字
- value:cookie的值
- max_age:cookie存活時間,秒爲單位
- expires:具體過期時間
- 當不指定max_age和expires時,關閉瀏覽器時此數據失效
添加cookie
responds = HttpResponse("已添加 my_var1,值爲123")
responds.set_cookie('my_var1',123,3600)
return responds
修改cookie
responds = HttpResponse("已修改 my_var1,值爲456")
responds.set_cookie('my_var1',456,3600*2)
return responds
刪除cookie
- HttpResponse.delete_cookie(key)
- 刪除指定的cookie。如果key不存在則什麼也不會發生
獲取cookie
- 通過request.COOKIES查詢綁定的字典(dict)獲取客戶端的COOKIES數據
value = request.COOKIES.get('cookies名','默認值')
Session
session是在服務器上開闢一段空間用於保留瀏覽器和服務器交互時的重要數據
實現方式
- 使用session需要在瀏覽器客戶端啓動cookie,且在cookie中存儲sessionid
- 每個客戶端都可以在服務器端有一個獨立的session
- 注意:不同的請求者之間不會共享這個數據,與請求者一一對應
初始配置
settings.py中配置session
1,向INSTALLED_APPS列表中添加
啓用sessions應用
INSTALLED_APPS=[
'django.contrib.sessions',
]
2,向MIDDLEWARE列表中添加:
啓動session中間件
MIDDLEWARE=[
'django.contrib.sessions.middleware.SessionMiddleware',
]
session的使用
session對象是一個類似於字典的SessionStore類型的對象,可以用類似於字典的方式進行操作
session能夠存儲如字符串,整型,字典,列表等
1,保存session的值到服務器
request.session['KEY'] = VALUE
2,獲取session的值
value = request.session['KEY']
value = request.session.get('KEY',默認值)
3,刪除session
del request.session['KEY']
settings.py中相關配置項
1,SESSION_COOKIE_AGE
作用:指定sessionid在cookies中的保存時長(默認是2周)
例如:SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2
2,SESSION_EXPIRE_AT_BROWSER_CLOSE = True
設置只要瀏覽器關閉時session就失效(默認爲False)
注意:Django中的session數據存儲在數據庫中,所以使用session前需要確保已經執行過migrate
django session的問題
1,django_session表是單表設計;且該表數據量持續增持【瀏覽器故意刪掉session&過期數據未刪除】
2,可以每晚執行python3 manage.py clearsessions【該命令可刪除已過期的session數據】