Django——Django之狀態保持(Cookie 和 Session)

Django 狀態保持(Cookie 和 Session)

​ http 協議是無狀態的,下一次訪問同一個頁面時並不知道上一次對這個頁面做了什麼,我們可以使用 Cookie 和 Session 來對頁面的狀態進行保持,這樣可以省去用戶在短時間內的重複操作,比如登錄等

Cookie

​ Cookie 是由服務器生成,存儲在瀏覽器的一小段文本信息, 當用戶在設置了 Cookie 的環境中進行操作時,瀏覽器會在 request 對象中存儲 Cookie 信息,並在用戶一段時間之內再一次使用相同地址的網站時,這些 Cookie 信息便可以使用

特點

  • 以鍵值對方式進行存儲
  • 通過瀏覽器訪問一個網站時,會將瀏覽器存儲的跟網站有關的所有 Cookie 信息發送給該網站的服務器 request.COOKIES
  • Cookie 時基於域名安全的
  • Cookie 是有過期時間的,如不指定,默認關閉瀏覽器之後 Cookie 就會過期

使用 Cookie

​ 設置 Cookie 需要一個HttpResponse對象或是它的子類對象,瀏覽器發送給服務器的 Cookies 保存在 request 對象的COOKIES中,視圖中函數如下:

def set_cookie(request):
    response = HttpResponse('這是 cookie')
    # 設置過期時間
    response.set_cookie('num', 1, max_age=14 * 24 * 3600)
    return response

def get_cookie(request):
    # 從 Cookie 中取值
    num = request.COOKIES['num']
    return HttpResponse(num)

Session

​ Session 是存儲在服務器端的另一種實現,默認存儲在 django_session 表中,除了經過編碼後的原數據,表中還會存儲一個 session_id 字段,並且這個字段的值會以 Cookie 的形式返回給瀏覽器,瀏覽器便可以通過 session_id 來找到對應的 Session

特點

  • Session 是以鍵值對進行存儲的
  • Session 依賴於 Cookie
  • Session 也是有過期時間的,默認爲兩週

Session 的相關方法

  • request.session['鍵'] = 值以鍵值對的格式寫 Session
  • request.session.get('鍵', 默認值)根據鍵值對讀取
  • request.session.clear()清除所有 Session,在存儲中刪除值的部分(鍵值對都刪除)
  • request.session.flunsh()清除 Session 數據,在存儲中刪除 Session 的整條數據
  • request.session.set_expiry(value)設置 Session 過期時間

使用 Session

​ Session 是包含在 request 也是對象中的,視圖中的函數如下:

def set_session(request):
    request.session['username'] = 'smart'
    request.session['age'] = 18
    return HttpResponse('這是 session')

def get_session(request):
    username = request.session['username']
    age = request.session['age']
    return HttpResponse(username + ':' + str(age))

Cookie 和 Session 的應用場景

​ Cookie 用來保存安全性要求不高的數據,例如用戶名,Session 用來保存涉及到安全性要求較高的數據,銀行卡賬戶、密碼、登陸狀態等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章