一、基本概念與工作機(jī)制
Cookie
- 可設(shè)置過(guò)期時(shí)間(持久化)或會(huì)話級(jí)別(關(guān)閉瀏覽器失效)。
- 支持安全屬性(
HttpOnly
、Secure
、SameSite
)防范 XSS 和 CSRF 攻擊。 - 服務(wù)器通過(guò)響應(yīng)頭
Set-Cookie
設(shè)置客戶端存儲(chǔ)的鍵值對(duì)。 - 客戶端每次請(qǐng)求自動(dòng)攜帶同源 Cookie,實(shí)現(xiàn)狀態(tài)保持(如登錄憑證)。
定義
由服務(wù)器生成并發(fā)送到客戶端的小型文本數(shù)據(jù)(通常不超過(guò)4KB),用于跟蹤用戶狀態(tài)。工作機(jī)制:
服務(wù)器通過(guò)響應(yīng)頭 Set-Cookie
設(shè)置客戶端存儲(chǔ)的鍵值對(duì)。客戶端每次請(qǐng)求自動(dòng)攜帶同源 Cookie,實(shí)現(xiàn)狀態(tài)保持(如登錄憑證)。特性:
可設(shè)置過(guò)期時(shí)間(持久化)或會(huì)話級(jí)別(關(guān)閉瀏覽器失效)。支持安全屬性(HttpOnly
、Secure
、SameSite
)防范 XSS 和 CSRF 攻擊。
Session
- 數(shù)據(jù)存儲(chǔ)在服務(wù)器內(nèi)存或數(shù)據(jù)庫(kù)中,安全性較高。
- 默認(rèn)會(huì)話級(jí)有效期,支持手動(dòng)設(shè)置超時(shí)時(shí)間。
- 首次請(qǐng)求時(shí)服務(wù)器創(chuàng)建 Session 并返回 Session ID,后續(xù)請(qǐng)求通過(guò)該 ID 關(guān)聯(lián)數(shù)據(jù)。
- 若客戶端禁用 Cookie,需通過(guò) URL 重寫傳遞 Session ID。
定義
服務(wù)器端存儲(chǔ)的用戶會(huì)話數(shù)據(jù),通過(guò) Session ID(通常存于 Cookie)標(biāo)識(shí)客戶端身份。工作機(jī)制:
首次請(qǐng)求時(shí)服務(wù)器創(chuàng)建 Session 并返回 Session ID,后續(xù)請(qǐng)求通過(guò)該 ID 關(guān)聯(lián)數(shù)據(jù)。若客戶端禁用 Cookie,需通過(guò) URL 重寫傳遞 Session ID。特性:
數(shù)據(jù)存儲(chǔ)在服務(wù)器內(nèi)存或數(shù)據(jù)庫(kù)中,安全性較高。默認(rèn)會(huì)話級(jí)有效期,支持手動(dòng)設(shè)置超時(shí)時(shí)間。
Local Storage
- 通過(guò)
localStorage.setItem(key, value)
存儲(chǔ)字符串類型數(shù)據(jù)。 - 同源窗口共享數(shù)據(jù),容量約5MB。
定義
HTML5 提供的客戶端持久化存儲(chǔ),數(shù)據(jù)永久保存(需手動(dòng)刪除)。工作機(jī)制:
通過(guò) localStorage.setItem(key, value)
存儲(chǔ)字符串類型數(shù)據(jù)。同源窗口共享數(shù)據(jù),容量約5MB。典型應(yīng)用
長(zhǎng)期保存用戶主題偏好、緩存靜態(tài)資源。
Session Storage
- 與 Local Storage API 相同,但作用域限定為單個(gè)標(biāo)簽頁(yè)。
- 適用于臨時(shí)數(shù)據(jù)存儲(chǔ)(如表單草稿、多步驟流程狀態(tài))。
定義
會(huì)話級(jí)客戶端存儲(chǔ),數(shù)據(jù)僅在當(dāng)前標(biāo)簽頁(yè)有效,關(guān)閉后自動(dòng)清除。工作機(jī)制:
與 Local Storage API 相同,但作用域限定為單個(gè)標(biāo)簽頁(yè)。適用于臨時(shí)數(shù)據(jù)存儲(chǔ)(如表單草稿、多步驟流程狀態(tài))。
?二、優(yōu)缺點(diǎn)對(duì)比
特性 | Cookie | Session | Local Storage | Session Storage |
---|
存儲(chǔ)位置 | | | | |
生命周期 | | | | 會(huì)話級(jí)(標(biāo)簽頁(yè)關(guān)閉清除) |
容量限制 | | 無(wú)限制(受服務(wù)器內(nèi)存限制) | | |
安全性 | | | | |
數(shù)據(jù)傳輸 | | | | |
三、應(yīng)用案例分析
Cookie 應(yīng)用:用戶登錄狀態(tài)
Session 應(yīng)用:購(gòu)物車功能
Local Storage 應(yīng)用:主題偏好持久化
Session Storage 應(yīng)用:表單草稿暫存
四、安全與最佳實(shí)踐
Cookie:
- 敏感數(shù)據(jù)(如 Token)應(yīng)設(shè)置
HttpOnly
和 Secure
屬性。 - 使用
SameSite=Strict
防范 CSRF 攻擊。
Session:
- 避免存儲(chǔ)過(guò)大對(duì)象,防止服務(wù)器內(nèi)存壓力。
- 分布式系統(tǒng)中需使用集中式 Session 存儲(chǔ)(如 Redis)。
Web Storage:
- 避免存儲(chǔ)敏感信息(如密碼),需加密處理。
- 監(jiān)聽
storage
事件實(shí)現(xiàn)跨標(biāo)簽頁(yè)同步(僅 Local Storage)。
五、總結(jié)
Cookie
適用于需與服務(wù)器交互的小型數(shù)據(jù)(如身份驗(yàn)證),但需注意安全性。Session
適合存儲(chǔ)敏感或臨時(shí)會(huì)話數(shù)據(jù)(如購(gòu)物車),依賴服務(wù)器資源。Local Storage
長(zhǎng)期存儲(chǔ)非敏感數(shù)據(jù)(如用戶偏好),容量大且易用。Session Storage
臨時(shí)存儲(chǔ)會(huì)話級(jí)數(shù)據(jù)(如表單草稿),標(biāo)簽頁(yè)隔離更安全。
根據(jù)具體場(chǎng)景選擇合適的存儲(chǔ)方案,結(jié)合安全策略和性能要求,可顯著提升用戶體驗(yàn)和系統(tǒng)可靠性。
閱讀原文:原文鏈接
該文章在 2025/4/8 15:02:06 編輯過(guò)