session、cookie、token的區(qū)別
核心區(qū)別:Session 是服務(wù)端存儲(chǔ)的用戶會(huì)話數(shù)據(jù),Cookie 是客戶端(瀏覽器)存儲(chǔ)的小型文本數(shù)據(jù),Token 是服務(wù)端生成的、客戶端攜帶的身份憑證,無需服務(wù)端存儲(chǔ)會(huì)話。
- 存儲(chǔ)位置與主體
Session(會(huì)話):存儲(chǔ)在服務(wù)端(如服務(wù)器內(nèi)存、數(shù)據(jù)庫),由服務(wù)端創(chuàng)建和管理,每個(gè)用戶對(duì)應(yīng)一個(gè)唯一 Session ID。
Cookie:存儲(chǔ)在客戶端(瀏覽器本地文件或內(nèi)存),由服務(wù)端通過響應(yīng)頭下發(fā),客戶端后續(xù)請(qǐng)求會(huì)自動(dòng)攜帶。
Token(令牌):存儲(chǔ)在客戶端(如瀏覽器 localStorage、移動(dòng)端緩存),由服務(wù)端生成后返回給客戶端,客戶端需手動(dòng)在請(qǐng)求頭/參數(shù)中攜帶。 - 工作原理
Session:1). 用戶登錄后,服務(wù)端生成唯一 Session ID,并存入用戶信息(如賬號(hào)、權(quán)限);
2). 服務(wù)端將 Session ID 通過 Cookie 下發(fā)給客戶端;
3). 客戶端后續(xù)請(qǐng)求攜帶該 Cookie,服務(wù)端通過 Session ID 查詢對(duì)應(yīng)的會(huì)話數(shù)據(jù),確認(rèn)身份。
Cookie:1). 服務(wù)端通過 Set-Cookie 響應(yīng)頭,向客戶端發(fā)送鍵值對(duì)數(shù)據(jù)(如 user=xxx; expires=xxx );
2). 客戶端按規(guī)則存儲(chǔ)(可設(shè)置過期時(shí)間、域名、路徑),后續(xù)請(qǐng)求自動(dòng)在 Cookie 請(qǐng)求頭中攜帶該數(shù)據(jù);
3). 服務(wù)端讀取 Cookie 數(shù)據(jù),實(shí)現(xiàn)狀態(tài)記錄(如記住登錄、購物車)。
Token:1). 用戶登錄時(shí),服務(wù)端驗(yàn)證賬號(hào)密碼后,生成加密 Token(如 JWT 格式,包含用戶信息和過期時(shí)間);
2). 客戶端存儲(chǔ) Token,后續(xù)請(qǐng)求通過 Authorization: Bearer Token 等方式攜帶;
3). 服務(wù)端接收 Token 后,直接解密驗(yàn)證有效性(無需查詢存儲(chǔ)),確認(rèn)身份。 - 關(guān)鍵特性對(duì)比
特性
Session 安全性較高(數(shù)據(jù)在服務(wù)端) ,跨域支持 差(依賴 Cookie 跨域限制),服務(wù)端壓力 大(需存儲(chǔ)會(huì)話數(shù)據(jù)),過期控制 服務(wù)端主動(dòng)銷毀/超時(shí)
Cookie 較低(易被篡改、竊取) ,差(受瀏覽器跨域策略限制),小(數(shù)據(jù)在客戶端),客戶端按 expires 過期
Token 中高(加密,無服務(wù)端存儲(chǔ)) ,好(可手動(dòng)攜帶,無跨域限制),小(無需存儲(chǔ),僅驗(yàn)證),客戶端丟棄/服務(wù)端驗(yàn)證過期時(shí)間

浙公網(wǎng)安備 33010602011771號(hào)