天天看點

Django-cookies和session

文章目錄

      • 會話
      • Cookies
        • 使用
        • 删除和使用
      • session
        • session配置
        • session的使用
        • settint.py中的相關配置
        • Django session的問題

會話

  • 從打開浏覽器通路一個網站,到關閉浏覽器結束此次通路,稱之為一次會話
  • HTTP協定是無狀态的,導緻會話狀态難以保護
  • cookies和session就是為了保持會話狀态而誕生的兩個儲存技術

Cookies

cookies是儲存在用戶端浏覽器上的存儲空間

  • cookies在浏覽器上是以鍵值對的形式進行存儲的,鍵和值都是ASCII字元串的形式存儲(沒有中文)
  • 是有存儲周期的
  • cookies中的資料都是按域存儲隔離的,不同域之間無法通路
  • cookies的内部資料會在每次通路此網址時都會攜帶到伺服器端,如果cookies過大會降低響應速度

使用

HttpResponse.set_cookie(key,value='', max_age = None, expires = None)
- key cookie的名字
- value cook的值
- max_age cookie存活時間,秒為機關
- expire 具體過期時間
- 不知道max_age和expire時 關閉浏覽器就過期
           

删除和使用

  • 删除

    HttpResponse.delete_cookie(key)

    删除指定key的cookie,如果沒有不會發生

  • 擷取

    request.COOKIES cookies字典

    request.COOKIES.get 溫柔點的取值

session

存儲在伺服器端,借助cookie實作

浏覽器向伺服器送出資料,然後生成session存在資料庫,并将sessionid 傳回給浏覽器,然後浏覽器将sessionid作為cookie儲存。每個用戶端在伺服器端有一個獨立的session

session配置

  1. 在INSTALLED_APPS中添加’django.contrib.sessions’
  2. 在MIDDLEWARE中添加’django.contrib.sessions.middleware.SessionMiddleware’

session的使用

session對象是一個類似于字典的sessionstore類型的對象,可以用類似于字典的方式操作

session能存儲字元串,整形,字典,清單等

  • 儲存session的值到伺服器

    request.session[‘key’] = value

  • 擷取session的值

    value = request.session[‘key’]

    value = request.session.get(‘key’,預設值)

  • 删除session

    del request.session[‘key’]

settint.py中的相關配置

  1. SESSION_COOKIE_AGE
    • 指定sessionid在cookies中的儲存時長(預設兩周)機關是秒
  2. SESSION_EXPIRES_AT_BROWSER_CLOSE = True

    設定隻要關閉浏覽器,session就失效(預設為false)

注意:伺服器端将session儲存在資料庫中,確定之前進行過資料庫的遷移migrate等

Django session的問題

  1. Django_session表是單表設計,随着使用者增多,内容會慢慢增加的,而且過期與删除後不會自動删除資料
  2. 可以每晚執行python mange.py clearsessions【可以删除已經過期的session資料】