cookie和session講解
- 2020 年 9 月 10 日
- 筆記
- python的django筆記
2.session是什麼?
保存在伺服器上的一組組鍵值對
HTTP是無協議狀態,每次請求都是互相獨立的,沒有辦法保存狀態
4.
瀏覽器將鍵值對保存在本地,有權利不保存,下次訪問是繼續攜帶
django中操作cookie
# 設置cookie response = HttpReponse('xxx') response.set_cookie(key,value) # max_age 超時時間 path 生效的路徑 response.set_signed_cookie(key,value,salt='xxx') # 獲取cookie request.COOKIES {} .get(key) request.get_signed_cookie(key,salt='xxx',default='') # 刪除cookie 將值設置為空 超時時間設置為0 response.delete_cookie(key)
6.session的過程
第一個請求,沒有cookie,設置鍵值對,根據瀏覽器生成一個唯一表是,給一個字典設置鍵值對
將字典轉成字元串(json序列化)進行加密,將唯一標識和字元串保存在資料庫中(django-session)返回給瀏覽器唯一標識(sessionid)的cookie,下次請求攜帶sessionid,伺服器根據session找到對應的數據(session-data)進行解密,進行反序列化,根據key獲取對應的值
# 設置session reqeust.session[key] = value # 獲取 reqeust.session[key] reqeust.session.get(key) # 刪除 request.session.pop(key) del reqeust.session[key] request.session.delete() # 刪除所有的鍵值對 不刪除cookie request.session.flush() # 刪除所有的鍵值對 也刪除cookie # 其他 默認的超時時間(2周) request.session.set_expiry(value) # 設置超時時間 request.session.clear_expired() # 清除已經失效的session數據 from django.conf import global_settings SESSION_COOKIE_NAME = 'sessionid' SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2 SESSION_SAVE_EVERY_REQUEST = True # 每次請求都更新session數據 SESSION_EXPIRE_AT_BROWSER_CLOSE = True # cookie在瀏覽器關閉時就失效 SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 默認是資料庫 文件 快取 資料庫+快取 加密cookie