Session 與 Cookie 的基本概念
Cookie 是什麼?
-
定義:Cookie 是一種儲存在用戶瀏覽器中的小型文字資料(通常大小限制在 4KB 以內),由伺服器發送到瀏覽器,用來儲存用戶相關的資訊。
-
用途:
-
追蹤用戶行為(例如廣告追蹤)。
-
儲存用戶偏好設定(例如網站語言選擇)。
-
支援身份驗證(例如儲存一個標記用戶身份的 token)。
-
-
工作原理:
-
當用戶訪問網站時,伺服器會在 HTTP 回應中包含 Set-Cookie 標頭,瀏覽器會將 Cookie 儲存。
-
之後的每次請求,瀏覽器會自動將相關 Cookie 附加在 HTTP 請求的 Cookie 標頭中,發送到伺服器。
-
-
屬性:
-
Expires 或 Max-Age:決定 Cookie 的有效期限。
-
HttpOnly:防止 JavaScript 直接存取,增加安全性。
-
Secure:僅在 HTTPS 連線中傳輸。
-
SameSite:控制跨站請求是否攜帶 Cookie(例如 Strict、Lax 或 None)。
-
Session 是什麼?
-
定義:Session(會話)是一種伺服器端的機制,用來追蹤用戶在一段時間內的狀態。伺服器會為每個用戶分配一個唯一的 Session ID,並將相關資料儲存在伺服器上。
-
用途:
-
管理用戶登錄狀態(例如記錄用戶是否已登入)。
-
儲存臨時資料(例如購物車內容)。
-
-
工作原理:
-
伺服器創建一個 Session 並生成一個唯一的 Session ID。
-
Session ID 通常透過 Cookie 傳送到用戶端,瀏覽器在後續請求中會帶上這個 Session ID。
-
伺服器根據 Session ID 查找對應的 Session 資料(通常儲存在伺服器記憶體、資料庫或快取如 Redis 中)。
-
-
特點:
-
Session 資料儲存在伺服器端,安全性較高。
-
Session ID 通常透過 Cookie 傳遞,但也可以透過 URL 或其他方式(不過不常見)。
-
Session 與 Cookie 的主要差異
特性 | Cookie | Session |
---|---|---|
儲存位置 | 用戶端(瀏覽器) | 伺服器端(資料儲存在伺服器) |
資料內容 | 儲存小型資料(例如 token、偏好設定) | 儲存用戶狀態(例如登錄資訊、購物車) |
安全性 | 較低,易被竄改(除非使用 HttpOnly 和 Secure) | 較高,資料儲存在伺服器,僅傳遞 Session ID |
有效期限 | 可設定長期有效(透過 Expires/Max-Age) | 通常短暫,伺服器可設定過期時間 |
大小限制 | 通常限制在 4KB | 無嚴格大小限制(取決於伺服器儲存) |
使用方式 | 直接由瀏覽器管理,自動附加到請求 | 伺服器根據 Session ID 查找資料 |
總結
-
Cookie 是儲存在瀏覽器的小型資料,適合儲存簡單資訊,並由瀏覽器自動管理。
-
Session 是伺服器端的狀態管理機制,透過 Session ID(通常儲存在 Cookie 中)與用戶端交互,適合處理敏感資料。