Cookie 與 Session 差異深度解析
在 Web 開發中,Cookie 與 Session 是實現會話追蹤的兩大核心機制。雖然兩者皆用於維持用戶狀態,但其運作原理、儲存位置與安全特性截然不同。理解兩者差異,有助於開發者根據業務場景做出最佳架構決策。
核心差異:儲存位置
- Cookie:資料儲存在客戶端(瀏覽器),屬於 HTTP 協定擴展機制。
- Session:資料儲存在伺服器端,通常以雜湊表形式管理,僅透過 Session ID 識別用戶。
Cookie 運作機制詳解
Cookie 主要包含五大屬性:名稱、值、過期時間、路徑、域。
- 會話級 Cookie:未設定過期時間,瀏覽器關閉即失效,儲存在記憶體中。
- 持久化 Cookie:設定過期時間,儲存在硬碟,跨瀏覽器會話仍有效。
Session 運作流程
- 客戶端發起請求,伺服器檢查是否攜帶 Session ID(通常儲於名為
JSESSIONID 的 Cookie)。
- 若存在,伺服器依 ID 檢索對應 Session 物件;若不存在或已失效,建立新 Session 並生成唯一、難以預測的 Session ID。
- Session ID 隨回應傳回客戶端,後續請求自動攜帶。
- 若客戶端禁用 Cookie,需透過 URL 重寫或隱藏表單欄位傳遞 Session ID。
優缺點對比與選型建議
| 維度 | Cookie | Session |
| 安全性 | 較低,易遭竄改、盜用(Cookie 欺騙) | 較高,敏感資料留在伺服器 |
| 伺服器負擔 | 無額外記憶體佔用 | 高併發下佔用大量記憶體 |
| 容量限制 | 單個 ≤ 4KB,單域名 ≤ 20 個 | 受限於伺服器記憶體 |
| 適用場景 | 非敏感偏好設定、追蹤識別 | 登入憑證、購物車、權限資訊 |
最佳實踐建議
- 登入資訊、權限標識等敏感資料 → 必須存放於 Session。
- 語言偏好、主題設定、追蹤 ID 等非敏感資料 → 可存放於 Cookie。
- 結合兩者優勢:Session 存核心狀態,Cookie 存持久化識別碼。
掌握 Cookie 與 Session 的特性邊界,能有效平衡安全性、效能與使用者體驗,構建健壯的 Web 應用。