Jwt Vs Session
Last updated: Apr 3, 2026Table of Contents
JWT VS Session
快速對照表
| 特性 | Session (會話) | JWT (JSON Web Token) |
|---|---|---|
| 儲存位置 | 伺服器端 (Server) | 用戶端 (Client/Browser) |
| 狀態性 | Stateful (有狀態) | Stateless (無狀態) |
| 擴充性 | 較難 (多台伺服器需同步 Session) | 極佳 (不需同步,適合微服務) |
| 安全性 | 較容易控制 (可隨時從後端註銷) | 較難 (過期前無法輕易註銷) |
| 頻寬消耗 | 小 (只傳送 ID) | 較大 (包含使用者資料與簽名) |
1. Session (傳統方式)
當使用者登入時,伺服器會建立一個 Session 並給予一個 ID(通常存在 Cookie 中)。
-
優點:
-
掌控權高: 如果你發現某個帳號有異常,可以立刻在後端刪除該 Session,強制使用者登出。
-
資料安全: 敏感資料都留在伺服器,前端只拿一個隨機 ID。
-
缺點:
-
伺服器壓力: 當使用者變多,伺服器記憶體消耗會增加。
-
擴展麻煩: 在分散式架構下,你需要額外的 Redis 或資料庫來共享 Session,否則使用者換到另一台伺服器就會「被登出」。
2. JWT (現代方式)
JWT 是一個被加密過的字串,裡面包含了使用者的資訊。伺服器不需要存任何東西,只要驗證簽名正確,就相信這個 Token。
-
優點:
-
效能好: 伺服器不需要去查資料庫或記憶體,直接解析 Token 即可驗證。
-
跨平台/微服務: 非常適合 API 架構。不同服務之間不需要共享 Session 也能驗證身分。
-
缺點:
-
無法即時註銷: 一旦發出去,除非過期,否則伺服器很難主動撤銷它(除非做額外的黑名單機制,但這就失去了無狀態的初衷)。
-
體積大: 每次請求都要傳送整串 Token,會佔用較多頻寬。
我該選哪一個?
-
選擇 Session,如果:
-
你正在開發傳統的 Web 單體應用程式。
-
你需要對使用者的登入狀態有絕對的控制權(例如:銀行、高安全性後台)。
-
你不想處理複雜的 Token 刷新機制。
-
選擇 JWT,如果:
-
你的架構是 SPA (React/Vue) 或 行動裝置 App。
-
你有微服務 (Microservices) 需求,需要多個系統共用登入狀態。
-
你希望能水平擴張伺服器,而不想處理 Session 同步問題。