Cookies 和session
阿新 • • 發佈:2019-01-09
一 會話跟蹤
在一個會話的多個請求中共享資料,這就是會話跟蹤技術
- 請求登入(請求引數是使用者名稱和密碼);
- 請求轉賬(請求引數與轉賬相關的資料);
- 請求信譽卡還款(請求引數與還款相關的資料)。
登入資訊在這個會話中是資料共享的,如果登入的是張三,那麼在轉賬和還款時一定是相對張三的轉賬和還款!這就說明
我們必須在一個會話過程中有共享資料的能力。
二 cookies篇
1 cookie簡單定義
1 cookie是在HTTP中它表示伺服器送給客戶端瀏覽器的小甜點。 2 key-value結構; 3 由伺服器建立; 4 瀏覽器儲存cookie
2 cookie執行流程
1 瀏覽器首次post 請求瀏覽器的時候回攜帶一個空的cookie :{} 2 如果操作驗證通過(登入成功)後,伺服器建立一個cookie :{key:value},作為響應頭的一部分傳給瀏覽器. 3 瀏覽器下次訪問網頁的時候帶著 ,這個建立好的cookie:{key:value}請求,伺服器檢視cookie資訊,如果cookie
存在,則放行,否則攔截.
3 cookie規範
注意 : 瀏覽器之間是不能進行共享cookie的; 也就是說在你使用IE訪問伺服器時,伺服器會把Cookie發給IE,然後由IE儲存起來,當你在使用FireFox訪問
伺服器時,不可能把IE儲存的Cookie傳送給伺服器。
4 cookie 與Http頭 -----------cookie 是通過HTTP請求和響應頭在客戶端和服務端進行傳遞的;
4.1 cookie:請求頭,客戶端發給伺服器; 首次post請求cookie為空
格式:cookie:a=A;b=B;c=C.多個cookie用';'隔開;
4.2 set_cookie:響應頭 ,伺服器傳送給客戶端
格式:一個cookie物件一個set-cookie: 如:set-cookie:a=A set-cookie:b=B set-cookie:c=C
5 cookie覆蓋
如果伺服器傳送重複的cookie,那麼會覆蓋原有的cookie; 如 : 第一次:Set-Cookie: a=A; 第二次:Set-Cookie: a=AA 則最後客戶端留下的cookie是 cookie:a=AA。
6 django中的cookie語法
6.1服務端在驗證通過後,設定cookie
rep = HttpResponse(...) 或 rep = render(request, ...) 或 rep = redirect() #rep是響應物件,只有相應物件才有.set_cookie方法 rep.set_cookie(key,value) #一次只能繫結一個cookie鍵值對 rep.set_signed_cookie(key,value,salt='加密鹽') #加密方式繫結cookie鍵值對
6.2 再次登入,獲取cookie資訊,進行驗證
value=request.COOKIES('key') #獲取cookie中鍵為key的值
6.3 刪除cookie
response.delete_cookie("key") #刪除cookie中key的那個鍵值對
7 例項程式碼
def login(request): if request.method=='GET': return render(request,'login.html') else: user=request.POST.get('user') pwd=request.POST.get('pwd') user_obj=models.UserInfo.objects.filter(user=user,pwd=pwd).filter() if user_obj: res_obj=redirect('/index/') res_obj.set_cookie("is_login",True,max_age=20) res_obj.set_cookie("user",user) return res_obj return HttpResponse('賬戶或者密碼錯誤')login cookies
三session篇
1 session 技術
1 給使用者的瀏覽器建立一個獨享的session物件; 2 每個瀏覽器都開闢獨有的session資源;
3 使用者再去訪問該伺服器中的其它web資源時,其它web資源再從使用者各自的session中 取出資料為使用者服務.
2 session 流程
3 django 中的session語法,結合session流程講解
3.1 設定session
request.session['is_login']=True
3.1.1設定session 執行流程
if not 獲取鑰匙(sessionid): 1 給瀏覽器建立隨機字串sessionid; 2 在django-sesion表下建立一條記錄(代表一個客戶端瀏覽器); 3 響應set_cookie("sessionid",隨機的字串),傳送給客戶端; else: 1 在django-sesion表下設定一條記錄(代表一個客戶端瀏覽器) 2 更新記錄設定session流程
3.2 獲取session值
session_name = request.session["session_name"]
3.2.1設定session 執行流程
1 去鑰匙 2 去django-session表中獲取對應記錄物件 3 通過物件取出is_login這個鍵對應的值獲取settion值的流程
3.3 刪除session的值
del request.session["session_name"]
3.3.1 獲取session執行流程
request.session.get("is_login")的實現: 1 取鑰匙; 2 去django-session表中獲取對應記錄物件 3 通過物件取出is_login這個鍵對應的值刪除session值的流程
3.4 刪除session
request.session.flush()
3.4.1刪除session執行流程
1 取sessionid鑰匙 2 取django-session表中獲取對應的記錄; 3 刪除對應的記錄flush 流程