一篇搞懂cookie和session
目錄- 一篇搞懂cookie和session
- cookie、session和token存在的意義是什么?
- 什么是cookie?
- 什么是session?
- cookie和session區別
- cookie和session執行流程
- cookie的失效時間(會話cookie和持久cookie)
- 會話cookie
- 持久cookie
cookie、session和token存在的意義是什么?
http是無狀態的,每次請求是獨立的,服務端不保存會話資訊,所以他的好處也就是快,但缺點也顯而易見,就是無法對不同用戶進行區分,
什么是cookie?
cookie存盤于客戶端,請求后由服務器發送回瀏覽器,下次訪問同一服務器時,將cookie作為引數攜帶至服務器,cookie是瀏覽器實作的一種資料存盤功能,是name=value的鍵值對,
優點:不占用服務器資源,效率高,
缺點:資料安全性較低,
什么是session?
session基于cookie實作,存盤于服務端,sessionID會被存盤到客戶端cookie中,瀏覽器第二次訪問服務器時,服務器從cookie中獲取sessionID查找對應session資訊,存在說明用戶已登錄,
優點:安全性較高,
缺點:占用服務器資源,可能會占滿,多臺服務器下又會出現session存盤在其中一臺服務器上,其他服務器沒法使用的情況,可以用redis服務器去解決,所有服務器都去呼叫redis服務器,
cookie和session區別
cookie存于客戶端,session存于服務器,
cookie中資料不能超過4k,session存盤空間大于cookie,
cookie只能存字串,其他型別會被轉為字串型別,session可存盤任意資料型別,
cookie的安全性比session低,
cookie和session執行流程
瀏覽器第一次向服務器發送請求,服務器檢查是否有攜帶JSESSIONID的cookie,
如果存在,將cookie值取出,在服務器的session池中找到對應的session進行是否登錄的校驗,
如果不存在,服務器會創建一個session物件,并隨機生成一個唯一的sessionID,保存到session池中,在回應瀏覽器時服務器會在http包的header中創建一個建為JSESSIONID,值為sessionID的cookie物件包含在Set-Cookie屬性中回傳給瀏覽器,瀏覽器將其存盤起來下次訪問時攜帶,
用戶登出時,服務器會將session銷毀,并生成新的JSESSIONID回傳給瀏覽器,瀏覽器下次攜帶給服務器后通過JSESSIONID找不到對應的session說明用戶是第一次登錄,
不一定非要cookie和session配合使用,例如只用cookie也能實作相同功能,但將用戶資訊存放在cookie是有很大安全風險的,而將sessionID存放在cookie中則沒有影響,
cookie的失效時間(會話cookie和持久cookie)
會話cookie
不設定過期時間,cookie保存在記憶體里,瀏覽器關閉,cookie就消失,
持久cookie
設定過期時間,setMaxAge(...),cookie保存在硬碟,只有時間過了才會失效,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/546035.html
標籤:Java
上一篇:MP 代碼生成器工具類
下一篇:MybatisPlus的邏輯洗掉
