Jwt Vs Session V2
Last updated: Apr 3, 2026當討論 Session(會話) 與 JWT(JSON Web Token) 的差異時,主要可以從認證方式、存儲位置、安全性與擴展性來比較。我用傳統中文詳細說明如下:
1️⃣ 基本概念
Session(會話)
- 伺服器端存儲使用者的登入資訊。
- 使用者登入後,伺服器會生成一個 session ID(通常存在 cookie 裡),每次請求都會帶上這個 ID,伺服器透過 ID 來查找對應的使用者資料。
JWT(JSON Web Token)
- 是一種自包含的令牌(token),包含使用者身份資訊與一些額外聲明(claims),並由伺服器簽名。
- 用戶端可以存儲 JWT(通常存在 localStorage 或 cookie),每次請求都攜帶這個 token,伺服器透過驗證簽名來認證使用者身份。
2️⃣ 存儲位置
| 特性 | Session | JWT |
|---|---|---|
| 資料存儲 | 伺服器端(例如 Redis, Memory, DB) | 客戶端(token 自帶資訊) |
| 用戶端存儲 | 只存 session ID(cookie) | 整個 token(cookie 或 localStorage) |
3️⃣ 安全性比較
-
Session:
- 因資料存於伺服器,較不易被篡改。
- 需要防範 Session Hijacking(會話劫持)。
-
JWT:
- 自包含資訊,可驗證簽名,防篡改。
- 若 token 泄露,用戶端即可使用,通常需要設定過期時間。
- 建議搭配 HTTPS 與短有效期 + Refresh Token 方案。
4️⃣ 擴展性與性能
-
Session:
- 適合單一伺服器或伺服器集群有共享 session 儲存(如 Redis)。
- 每次請求都需要查找伺服器端資料,可能增加伺服器負擔。
-
JWT:
- 無需伺服器查找,可實現無狀態認證(Stateless),適合微服務架構。
- 對伺服器負擔較低,但 token 過大會增加每次請求的傳輸量。
5️⃣ 適用場景
-
Session:
- 傳統網站,伺服器端渲染 (SSR)。
- 需要即時登出或即時撤銷權限。
-
JWT:
- SPA(單頁應用)或移動端 API 認證。
- 分布式服務或微服務架構,無需共享 session 存儲。
✅ 小結
- Session → 伺服器端存資訊,安全性高,但擴展性稍弱。
- JWT → 客戶端自帶資訊,方便擴展,適合無狀態認證,但需注意 token 泄露風險。
如果你想,我可以畫一張 Session vs JWT 的流程圖,讓整個登入認證流程一眼就看懂。
你希望我畫嗎?