Django--cookie(登陸用)

1、cookie產生緣由

2、cookie的原理圖

3、Django中如何設置/讀取/刪除cookie

4、Django中如何設置cookie的參數

 

1、cookie產生緣由

HTTP協議的無狀態保存:
指的是同一個瀏覽器給服務器發兩次請求,
服務器不知道第二次請求以前是否還發過請求。
每一次訪問服務器都認爲是新請求。瀏覽器

因此須要對會話進行跟蹤,cookie就是會話跟蹤技術之一服務器

PS:四種會話跟蹤技術
a) URL重寫:
URL地址重寫的原理是將該用戶Session的id信息重寫 到URL地址中,以便在服務器端進行識別不一樣的用戶。
URL重寫可以在客戶端停用cookies或者不支持cookies的時候仍然可以發揮做用。
b) 隱藏表單域:
將用戶Session的id添加到HTML表單元素中提交到服務器,此表單元素並不在客戶端顯示,瀏覽時看不到,源代碼中有。
c) Cookie
d) session cookie

2、cookie的原理圖

cookie是具體一個瀏覽器針對一個服務器存儲的key-valuesession

有過時時間,可調,默認是兩週dom

問題來了,服務器是指什麼?ip+port 仍是域名?函數

看cookie的原理圖:url

先看上門圖片中的場景,理解好三個問題,就理解了cookie機制:spa

一、在cookie有效期內,哪怕圖中A電腦關機在開機,A電腦的瀏覽器訪問域名y1仍是會帶這個cookie{is_login:true}
二、在cookie有效期內,A電腦的同一個瀏覽器訪問域名y2不會帶上域名y1的cookie,而是y2的cookie
二、若是是新的瀏覽器,訪問這個服務器,會帶一個空cookieblog

3、Django中如何設置/讀取/刪除cookie

一、設置cookie繼承

def login(request):
  login_success=1
  if login_success:
    # 獲取響應體(render或redirect也能夠,都是繼承的HttpResponse)
    response=HttpResponse("登陸成功")
    # 在響應體設置cookie
    response.set_cookie("is_login", True)
    return response
  else:
    return HttpResponse("登陸失敗")

二、讀取cookie

def index(request):
  cookies = request.COOKIES
  # cookies.get("k","")獲取不到默認爲""
  is_login = cookies.get("is_login")
  if is_login:
    #已登陸
  else:
    #跳轉到登陸頁面

三、刪除cookie:註銷的時候能用到

response.delete_cookie("session_id",path="/",domain=name)

4、Django中如何設置cookie的參數

def set_cookie(self, key,        #鍵value='',     #值max_age=None,  #超時時間 cookie須要延續的時間(以秒爲單位)若是參數是None,這個cookie會延續到瀏覽器關閉爲止。expires=None,     #超時時間 expires默認None ,cookie失效的實際日期/時間。設置方式datetime.datetime(year=2018,month=5,day=29,hour=14) path='/',     #Cookie生效的路徑,瀏覽器只會把cookie回傳給帶有該路徑的頁面,這樣能夠避免將cookie傳給站點中的其餘的應用。         # 「/」表示根路徑,根路徑的cookie能夠被任何url的視圖函數獲取             domain=None,    #Cookie生效的域名,你可用這個參數來構造一個跨站cookie。            #如, domain=".example.com"  表示所構造的cookie對下面這些站點都是可讀的:         #www.example.com 、 www2.example.com 和an.other.sub.domain.example.com           #若是該參數設置爲 None ,cookie只能由設置它的站點讀取。secure=False,     #若是設置爲 True ,瀏覽器將經過HTTPS來回傳cookie。httponly=False    #只能http協議傳輸,沒法被JavaScript獲取(不是絕對,底層抓包能夠獲取到也能夠被覆蓋))

相關文章
相關標籤/搜索