session和token都是用來保持會話,功能相同
一、session機制,原理
session是服務端存儲的一個對象,主要用來存儲所有訪問過該服務端的客戶端的用戶信息(也可以存儲其他信息),從而實現保持用戶會話狀态。但是服務器重啟時,内存會被銷毀,存儲的用戶信息也就消失了。
不同的用戶訪問服務端的時候會在session對象中存儲鍵值對,“鍵”用來存儲開啟這個用戶信息的“鑰匙”,在登錄成功後,“鑰匙”通過cookie返回給客戶端,客戶端存儲為sessionId記錄在cookie中。當客戶端再次訪問時,會默認攜帶cookie中的sessionId來實現會話機制。
session是基于cookie的。
session持久化
用于解決重啟服務器後session就消失的問題。在數據庫中存儲session,而不是存儲在内存中。通過包:express-mysql-session
其它
當客戶端存儲的cookie失效後,服務端的session不會立即銷毀,會有一個延時,服務端會定期清理無效session,不會造成無效數據占用存儲空間的問題。
二、token機制,原理
适用于項目級的前後端分離(前後端代碼運行在不同的服務器下)
請求登錄時,token和sessionId原理相同,是對key和key對應的用戶信息進行加密後的加密字符,登錄成功後,會在響應主體中将{token:'字符串'}返回給客戶端。客戶端通過cookie、sessionStorage、localStorage都可以進行存儲。再次請求時不會默認攜帶,需要在請求攔截器位置給請求頭中添加認證字段Authorization攜帶token信息,服務器端就可以通過token信息查找用戶登錄狀态。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!