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 的流程圖,讓整個登入認證流程一眼就看懂。

你希望我畫嗎?