cookie和session講解

1.cookie是什麼?

        保存在瀏覽器本地上的一組組鍵值對

2.session是什麼?

        保存在伺服器上的一組組鍵值對

3.為什麼要有cookie?

         HTTP是無協議狀態,每次請求都是互相獨立的,沒有辦法保存狀態

4.為什麼要有session?

      cookie的大小和個數受到瀏覽器的限制

      cookie保存在本地瀏覽器不太安全

5.cookie特性:

       由服務讓瀏覽器進行設置返回set-cookie的響應頭

       瀏覽器將鍵值對保存在本地,有權利不保存,下次訪問是繼續攜帶

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