session和cookie自動登錄機制


cookie的存儲

cookie是瀏覽器支持的一種本地存儲方式。以dict,鍵值對方式存儲。

{"sessionkey": "123"}

瀏覽器會自動對於它進行解析。

http請求是一種無狀態的請求

用戶向服務器發起的兩次請求之間是沒有狀態的。也就是服務器並不知道這是同一個用戶發的。

有狀態請求(cookie)

服務器a發回來的id會放到服務器a的域之下。不能跨域訪問cookie。

使用瀏覽器隨便打開一個網頁,然后f12打開。

比如我使用的Chrome瀏覽器

會找到存儲在瀏覽器本地的cookie值

點擊clear all清空所有的cookie f5刷新頁面,會發現又把這些cookie值進來。

如果將用戶名和密碼直接保存在cookie,可以實現最垃圾最簡略版本的自動登錄。

解決cookie放在本地不安全的問題(session)

用戶在第一次請求后,瀏覽器回復的id既可以是用戶的user id。
也可以一段任意的字符串,我們把它叫做session id

根據用戶名和密碼,服務器會采用自己的規則生成session id。這個session id保存在本地cookie。瀏覽器請求服務器會攜帶。

輸入用戶名 & 密碼
調用 login(), 后端程序會根據用戶名密碼生成session id。保存在數據庫中。
用戶登錄之后,需要通過這個session id取出這些基本信息。

Django的默認表中的session表就記錄了用戶登錄時,后端我們Django為用戶生成的sessionid

可以看到session key value 和過期時間。

我們可以清空這張表的數據。運行項目進行登錄。

此時通過f12查看瀏覽器在本地存儲的session id。可以看到如下圖和我們數據庫中的一致。

session_key 發到瀏覽器叫做session id

通過session id 用戶訪問任何一個頁面都會攜帶,服務器就會認識。

Setting.py中,

這個app會攔截我們每次的request請求,在request中找到session id,然后去數據表中進行查詢。
然后通過session key 去找到session data。此時直接為我們取出了user。

在服務器返回瀏覽器的response中也會直接加上session id

cookie是瀏覽器本地存儲機制,存在域名之下,存儲不安全。
服務器在返回id時通過規則生成一串字符,並設置了過期時間。存儲在服務器端(數據庫)




 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM