Django之cookie/session

cookie

 

當咱們經過瀏覽器來訪問網站的時候,因爲HTTP自己是無狀態的,因此當咱們結束訪問後第二次再來訪問的時候,服務器自己是不認識咱們(它不知道咱們以前來過,也就不會保存咱們以前的信息),好比當咱們第一次登入的網站後第二次再來的時候咱們仍是須要從新登入,這樣網站不能保存咱們的密碼,是否是很麻煩,那如何解決這個問題呢?那cookie和session就是爲了解決這個問題而產生的。python

cookie:(1)咱們第一次訪問服務器的時候是 request直接請求過去,而後服務器會返回response和一個設置好的cookie值給瀏覽器,這個cookie直接保存在瀏覽器本地能夠設置過時時間,當咱們第二次訪問這個網站的時候咱們發送的服務器的不在是單純的request而是加上了一個cookie值(這個值是惟一的,服務器經過這個值來判斷這個訪問者是誰,有哪些記錄等),服務器根據這些值再發給瀏覽器信息。(圖左)數據庫

    (2)cookie是保存在本地的一種存儲機制,大小不超過4Kbdjango

session:(1)咱們第一次訪問服務器的時候,服務器在產生一個session的文件保存在服務器數據庫中,這session文件中保存的就是這個客戶的一些信息包括一個session_id,用戶名,過時時間等等,而且是以加密的形式保存;而後服務器響應給瀏覽器的時候會把這個session_id發送給瀏覽器,當用戶下次訪問服務器的時候會把session_id一塊兒發送給服務器,服務器經過session_id去數據庫中查找該用戶的信息,解析這些信息後,返回給瀏覽器特定的頁面。瀏覽器

    (2)session自己是一種思路,解決方案,不一樣的語言,框架設置session的方式不一樣;它是一種保存在服務器數據庫中的一種存儲方式;它是加密的。安全

 

Django中cookie的設置:服務器

  設置cookie:cookie

  response.set_cookie("key","value",max_age = 180,path="/cms/")session

  1. key:這個cookiekey
  2. value:這個cookievalue
  3. max_age:最長的生命週期。單位是秒。
  4. expires:過時時間。跟max_age是相似的,只不過這個參數須要傳遞一個具體的日期,好比datetime或者是符合日期格式的字符串。若是同時設置了expiresmax_age,那麼將會使用expires的值做爲過時時間。
  5. path:對域名下哪一個路徑有效。默認是對域名下全部路徑都有效。
  6. domain:針對哪一個域名有效。默認是針對主域名下都有效,若是隻要針對某個子域名纔有效,那麼能夠設置這個屬性.
  7. secure:是不是安全的,若是設置爲True,那麼只能在https協議下才可用。
  8. httponly:默認是False。若是爲True,那麼在客戶端不能經過JavaScript進行操做。

  獲取cookie:框架

  經過request.COOKIES來得到。這個對象是一個字典類型dom

  刪除cookie:

  經過delete_cookie("username")來刪除cookie,其實是把cookie的值設置爲空額字符串,而後把過時時間設置爲0;關閉瀏覽器天然就刪除了

cookie代碼實例

from django.http import HttpResponse  
from datetime import datetime
from django.utils.timezone import make_aware  
def index(request):   #設置cookie
    response = HttpResponse("ok")
    expires = datetime(year=2019,month=12,day=20,hour=0,minute=0,second=0)
    expires = make_aware(expires)
    response.set_cookie("username","abc",max_age=190,expires = expires,path="/cms/")
    return  response

def delete_cookie(request):    #刪除cookie
    response = HttpResponse("delete")
    response.delete_cookie("username")
    return response

def cookie_list(request):   #獲取cookie
    cookies = request.COOKIES   
    username = cookies.get("username")
    return  HttpResponse(username)

 

django中session的設置:

session經常使用的方法以下:

  1. get:用來從session中獲取指定值。

  2. pop:從session中刪除一個值。

  3. keys:從session中獲取全部的鍵。

  4. items:從session中獲取全部的值。

  5. clear:清除當前這個用戶的session數據。 從瀏覽器中刪除,不會刪除數據庫的中

  6. flush:刪除session而且刪除在瀏覽器中存儲的session_id,通常在註銷的時候用得比較多。 直接刪除數據庫中的

  7. set_expiry(value):設置過時時間。

    1. value能夠是整形表明秒數,多少秒後過時
    2. 能夠是0,關閉瀏覽器就過時
    3. 能夠是None,會使用全局的session配置。在settings.py中能夠設置SESSION_COOKIE_AGE來配置全局的過時時間。默認是1209600秒,也就是2周的時間
  8. clear_expired:清除過時的sessionDjango並不會清除過時的session,須要按期手動的清理,或者是在終端,使用命令行python manage.py clearsessions來清除過時的session

from datetime import  timedelta
def session_list(request):
    # request.session["username"] = "username"     #添加session
    # username = request.session.get('username')    #獲取session
    # print(username)
  request.session.clear() #刪除session_id 不會刪除數據庫中的數據
  request.session.flush() #暴力刪除數據庫中的數據一塊兒刪除

  request.session.clear_expired() #清除過時的session expiry = timedelta(days=2) request.session.set_expiry(None) return HttpResponse("ok")
相關文章
相關標籤/搜索