HTTP 狀態管理: cookie 與 session
阿新 • • 發佈:2022-05-25
HTTP最大的缺點:無狀態(記性不太好)
無狀態,每個請求都是獨立的
導致後續請求需要重傳,且需求累增
因此,HTTP的狀態管理(會話機制)用來彌補這一缺陷
session與cookie叫做會話跟蹤機制
cookie
一小段文字資訊
- 伺服器需要記錄使用者狀態,就向客戶端頒發一個Cookie
- 客戶端瀏覽器會把Cookie儲存起來,當瀏覽器再請求該網站時,瀏覽器把請求的網址連同cookie一同傳送給伺服器,伺服器檢查該cookie來辨認使用者狀態
服務端通過setCookie設定響應頭
session
-
session是另一種記錄客戶狀態的機制,儲存在伺服器上。客戶端瀏覽器訪問伺服器的時候,伺服器以某種形式把客戶端資訊儲存在伺服器上,也增加了一些服務端的儲存壓力(我記得有的用資料庫存了session)
-
客戶端瀏覽器再次訪問時,只需要從該session中查詢該客戶的狀態就可以了
cookie機制是通過檢查客戶身上的通行證來確認客戶身份
session機制就是通過檢查伺服器身上的客戶明細表來檢查客戶身份
首次訪問生成sessionId和Session,伺服器儲存到對映區
返回給客戶端SessionId,儲存到cookie儲存區
後續訪問,cookie儲存區攜帶SessionID,伺服器據此查詢對應的session,進行其他操作
然後返回處理結果
如果沒找到session,或者客戶端發來的cookie沒有sessionID,那麼生成一個新的cookie/session通過cookie把sessionID儲存到客戶端
90%以上的網站都是這樣支援的
但是cookie可以被認為篡改,因此還有另外一種儲存SessionID的方法
- 這種方法就是URL重寫,把查詢sessionID當做一個引數寫在url上
- 隱藏表單,提交的時候傳給伺服器
session超時失效
cookie理論上可以永久儲存
- 為了防止記憶體溢位,伺服器把很久沒活躍的session刪除,即是session的超時失效
- 程式呼叫HttpSession.invalidate
- 伺服器被異常中止
http儲存狀態的兩種機制
- 存放位置不同
session儲存在伺服器,cookie儲存在客戶端 - 安全性不同,隱私策略不同
cookie儲存在客戶端,容易被篡改,存在敏感資訊洩露的風險。或者把cookie資訊加密,在伺服器解密,保證cookie資訊只有讀的懂
session儲存在伺服器,安全性比較好 - 有效期上的不同
一、設定cookie有效時間,可以設定很久很久過期,在瀏覽器儲存很長時間
二、服務端會定時清除session,防止對伺服器造成過多壓力。session依賴於cookie中的sessionID,而cookie的sessionID預設是-1,只要關閉瀏覽器,這個sessionID就失效了 - 對伺服器造成的壓力不同
session儲存在伺服器端,併發量大的時候伺服器壓力大
cookie儲存在客戶端,壓力不大