階段 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