tft每日頭條

 > 生活

 > 使用token多還是session多

使用token多還是session多

生活 更新时间:2025-02-23 07:35:50

session和token都是用來保持會話,功能相同

一、session機制,原理

使用token多還是session多(用了這麼久token和session的區别)1

session是服務端存儲的一個對象,主要用來存儲所有訪問過該服務端的客戶端的用戶信息(也可以存儲其他信息),從而實現保持用戶會話狀态。但是服務器重啟時,内存會被銷毀,存儲的用戶信息也就消失了。

不同的用戶訪問服務端的時候會在session對象中存儲鍵值對,“鍵”用來存儲開啟這個用戶信息的“鑰匙”,在登錄成功後,“鑰匙”通過cookie返回給客戶端,客戶端存儲為sessionId記錄在cookie中。當客戶端再次訪問時,會默認攜帶cookie中的sessionId來實現會話機制。

session是基于cookie的。

  • cookie的數據4k左右
  • cookie存儲數據的格式:字符串key=value
  • cookie存儲有效期:可以自行通過expires進行具體的日期設置,如果沒設置,默認是關閉浏覽器時失效。
  • cookie有效範圍:當前域名下有效。所以session這種會話存儲方式方式隻适用于客戶端代碼和服務端代碼運行在同一台服務器上(前後端項目協議、域名、端口号都一緻,即在一個項目下)

session持久化

用于解決重啟服務器後session就消失的問題。在數據庫中存儲session,而不是存儲在内存中。通過包:express-mysql-session

其它

當客戶端存儲的cookie失效後,服務端的session不會立即銷毀,會有一個延時,服務端會定期清理無效session,不會造成無效數據占用存儲空間的問題。

二、token機制,原理

使用token多還是session多(用了這麼久token和session的區别)2

适用于項目級的前後端分離(前後端代碼運行在不同的服務器下)

請求登錄時,token和sessionId原理相同,是對key和key對應的用戶信息進行加密後的加密字符,登錄成功後,會在響應主體中将{token:'字符串'}返回給客戶端。客戶端通過cookie、sessionStorage、localStorage都可以進行存儲。再次請求時不會默認攜帶,需要在請求攔截器位置給請求頭中添加認證字段Authorization攜帶token信息,服務器端就可以通過token信息查找用戶登錄狀态。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved