Jwt Vs Session

Last updated: Apr 3, 2026

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 同步問題。