Django中的Cookies與Session

Cookies

cookies是保存在客戶端瀏覽器上的存儲空間,通常用來記錄瀏覽器端自己的信息和當前連接的確認信息
cookies 在瀏覽器上是以鍵-值對的形式進行存儲的,鍵和值都是以ASCII字符串的形存儲(不能是中文字符串)
cookies 的內部的數據會在每次訪問此網址時都會攜帶到服務器端,如果cookies過大會降低響應速度

在Django服務器端來設置瀏覽器的COOKIE 必須通過 HttpResponse 對象來完成

  • 添加、修改COOKIE
    HttpResponse.set_cookie(key, value='', max_age=None, expires=None)
    key:cookie的名字
    value:cookie的值
    max_age:cookie存活時間,秒爲單位
    expires:具體過期時間
    當不指定max_ageexpires 時,關閉瀏覽器時此數據失效

  • 刪除COOKIE
    HttpResponse.delete_cookie(key)
    刪除指定的key 的Cookie。 如果key 不存在則什麼也不發生。

  • 設置cookie

    from django.http import HttpResponse
    resp = HttpResponse()
    resp.set_cookie('cookiesName', cookiesValue, 3600)
    
  • 修改cookie

    from django.shortcuts import render
    resp = render(request,'xxx.html',locals())
    resp.set_cookie('cookiesName', newCookiesValue, 3600)
    
  • 刪除cookie

    # 刪除瀏覽器鍵爲 my_var1的cookie
    responds = HttpResponse("已刪除 cookiesName")
    responds.delete_cookie('cookiesName')
    return responds
    
  • 獲取cookie
    通過 request.COOKIES 綁定的字典(dict) 獲取客戶端的 COOKIES數據

    value = request.COOKIES.get('cookiesName', 'defaultValue')
    print("cookiesName = ", value)
    

    Chrome 瀏覽器 可能通過開發者工具的 Application >> Storage >> Cookies 查看和操作瀏覽器端所有的 Cookies 值

session 會話控制

session又名會話控制,是在服務器上開闢一段空間用於保留瀏覽器和服務器交互時的重要數據
session的起源:

  • http協議是無狀態的:每次請求都是一次新的請求,不會記得之前通信的狀態

  • 實現狀態保持的方式:在客戶端或服務器端存儲與會話有關的數據

  • 推薦使用sesison方式,所有數據存儲在服務器端

  • 實現方式

    • 使用 session 需要在瀏覽器客戶端啓動 cookie,且用在cookie中存儲sessionid
    • 每個客戶端都可以在服務器端有一個獨立的Session
    • 注意:不同的請求者之間不會共享這個數據,與請求者一一對應
  • Django啓用Session

    • settings.py 文件中

    • INSTALLED_APPS 列表中添加:

      INSTALLED_APPS = [
          # 啓用 sessions 應用
          'django.contrib.sessions',
      ]
      
    • 向 MIDDLEWARE_CLASSES 列表中添加:

      MIDDLEWARE = [
          # 啓用 Session 中間件
          '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']
    • settings.py 中有關 session 的設置
      SESSION_COOKIE_AGE
      作用: 指定sessionid在cookies中的保存時長(默認是2周),如下:SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2
      SESSION_EXPIRE_AT_BROWSER_CLOSE = True
      設置只要瀏覽器關閉時,session就失效(默認爲False)
    • session 缺省配置
      import django.conf.global_settings
    • 注: 當使用session時需要遷移數據庫,否則會出現錯誤
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章