1. 程式人生 > 其它 >HTTP 狀態管理: cookie 與 session

HTTP 狀態管理: cookie 與 session

HTTP最大的缺點:無狀態(記性不太好)
無狀態,每個請求都是獨立的
導致後續請求需要重傳,且需求累增
因此,HTTP的狀態管理(會話機制)用來彌補這一缺陷
session與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儲存狀態的兩種機制

  1. 存放位置不同
    session儲存在伺服器,cookie儲存在客戶端
  2. 安全性不同,隱私策略不同
    cookie儲存在客戶端,容易被篡改,存在敏感資訊洩露的風險。或者把cookie資訊加密,在伺服器解密,保證cookie資訊只有讀的懂
    session儲存在伺服器,安全性比較好
  3. 有效期上的不同
    一、設定cookie有效時間,可以設定很久很久過期,在瀏覽器儲存很長時間
    二、服務端會定時清除session,防止對伺服器造成過多壓力。session依賴於cookie中的sessionID,而cookie的sessionID預設是-1,只要關閉瀏覽器,這個sessionID就失效了
  4. 對伺服器造成的壓力不同
    session儲存在伺服器端,併發量大的時候伺服器壓力大
    cookie儲存在客戶端,壓力不大