cookie、session和token原理

目錄

1 背景     

2 cookie

2.1 cookie原理

2.2  cookie面臨的問題

3 sesssion

3.1 sesssion原理

3.2  sesssion面臨的問題

4 token

4.1 token原理

4.2  token優勢


1 背景     

 用戶數量的增多,傳統的服務端存儲session的方式,面對負載均衡多服務器的部署方式,不好解決用戶登錄的問題。面對這兩個問題,出現了token的驗證方式,下面均益數一下三者的區別和問題,以及解決方案。

2 cookie

2.1 cookie原理

       cookie是存在瀏覽器的標識用戶的方式,由服務端爲每一個用戶簽發不同session id發送給瀏覽器並存儲在cookie,下次訪問會帶上這個session id,服務端就知道這個訪問是哪個用戶了。

2.2  cookie面臨的問題

  • CSRF(跨站請求僞造)攻擊,這個也好解決,很多框架都屏蔽這個問題
  • 有的客戶端不支持cookie,需要手動設置,比如小程序
  • 瀏覽器對cookie有限制,不能手動設置cookie,對於混合嵌套的開發有問題,比如小程序跳轉H5頁面,不能攜帶cookie
  • 瀏覽器對單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie

3 sesssion

3.1 sesssion原理

       session是存儲在服務端標識用戶的方式,服務端爲每個用戶生成不同的session id,還有與之相對應的信息,比如用戶id和登錄時間等。通過服務端的session和瀏覽器的cookie一一對應,來區分這個用戶是誰。

3.2  sesssion面臨的問題

  • 負載均衡多服務器的情況,不好確認當前用戶是否登錄,因爲多服務器不共享seesion。這個問題也可以將session存在一個服務器中來解決,但是就不能完全達到負載均衡的效果。
  • 每個客戶端只需存儲自己的session id,但是服務端卻需要存儲所有用戶session id,對服務器也是一個壓力

4 token

4.1 token原理

(1)客戶端第一次請求時,發送用戶信息到服務器。服務器對用戶信息使用HSA256算法及密鑰進行簽名,再將這個簽名和數據一起作爲token返回給客戶戶端。

(2)服務端不再保存token,客戶端保存token。

(3)當客戶端再次發送請求時,在請求信息中將token一起發送給服務器。

(4)服務器用同樣的HSA256算法和密鑰,對數據再計算一次簽名,和token的簽名做比較

(5)如果相同,服務器就知道客戶端登錄過,則反之。

4.2  token優勢

         服務端把用戶信息加密(token)傳給客戶端,客戶端每次訪問都返回token,服務端解密token,就知道這個用戶是誰了。通過cpu加解密,服務端就不需要存儲session id佔用存儲空間,就很好的解決負載均衡多服務器的問題了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章