目錄
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佔用存儲空間,就很好的解決負載均衡多服務器的問題了