階段 5 · 帳號、權限與收錢

Session

使用者登入後,系統用來記住他身份的狀態。

先用一句話理解

使用者登入後,系統用來記住他身份的狀態。

打個比方

像入場手環,讓你不用每次進出都重新買票。

什麼時候會遇到

任何需要保持登入狀態的網站或 App。

再往深一點看

Session 是 Authentication 成功之後的產物——登入確認你是誰,Session 記住「你已經登入過了」這件事,讓接下來的每個請求不必再重新驗證。實作上有兩種主流做法:傳統的 server-side session 把身份存在伺服器記憶體或 Redis,並給瀏覽器一個 session ID cookie;現代較常見的 JWT(JSON Web Token)則把身份資訊簽章後直接存在客戶端,伺服器不需要維護狀態。兩者各有優缺點——JWT 無狀態、好橫向擴展,但 token 一旦簽發就無法主動撤銷,強制登出需要額外設計黑名單機制。

舉個例子

你用 Auth.js(NextAuth)做登入:使用者 Google 登入後,Auth.js 在伺服器建立 session 並寫入加密 cookie;之後每個頁面請求,Auth.js 自動讀取 cookie 驗證 session 還沒過期,再把使用者資料注入到 `getServerSideProps` 或 Server Component 裡,不需要每次重新打 Google OAuth。

常見誤解

  • - 登出時只清掉前端狀態(例如清 localStorage),沒有在後端讓 session 或 token 失效,攻擊者拿到舊 token 還是能繼續使用。
  • - Session 過期時間設太長(例如 30 天不需重新驗證),帳號遭竊後攻擊者有很長的窗口期可以操作。
  • - 把 JWT 存在 localStorage 而不是 httpOnly cookie,導致任何 XSS 攻擊都能直接讀走 token。

相關名詞

相關服務

Auth.jsClerkSupabase

相關工具