前端面试题

Cookie、Session、JWT登录方案对比

Cookie session和JWT怎么选?

为什么面试官会问这道题

登录方案是系统设计高频题——看你有没有想过状态、注销、XSS/CSRF这些问题。

如何回答

  1. 1

    服务端session:服务端存会话数据(Redis),客户端只拿不透明session id的cookie。注销容易,但需要session存储+粘性会话或共享缓存。

  2. 2

    JWT:服务端签发的无状态token。每次请求无需查库,水平扩展友好。过期前没法注销(缓解:短TTL+refresh token+黑名单)。

  3. 3

    存哪里:httpOnly+Secure cookie防XSS但要防CSRF(SameSite=Lax/Strict或CSRF token)。localStorage对XSS裸奔,任何注入脚本都能读。

  4. 4

    JWT payload是base64编码不是加密——别放敏感数据。要加密用JWE。

  5. 5

    2026典型组合:短TTL的access JWT(15分钟)+长TTL的refresh token放httpOnly cookie。

参考回答示例

内部单体我选Redis里的服务端session——注销一个DEL搞定,cookie也小。微服务或多region我走JWT——没有共享session store要协调。不管哪种,token放httpOnly+Secure+SameSite=Lax的cookie,绝不放localStorage——任何XSS都能偷。JWT最大坑是注销:要即刻"踢下线"就得维护黑名单,那"无状态"的卖点就破功了。标准套路:15分钟access JWT+7天refresh在httpOnly cookie,每次刷新轮换refresh,这样偷到的refresh只能用一次。

实用技巧

  • 能不用localStorage存JWT就不用——XSS直接game over。

  • SameSite=Lax是2026年的合理CSRF默认(多数浏览器已默认)。

  • 即答侠把这题拆成"状态 vs 扩展 vs 注销"三个维度——结构化答,不堆术语。

常见问题

JWT能注销吗?

原生不能。要么等过期、要么维护黑名单(把状态加回来)、要么轮换签名密钥(所有人都踢)。

OAuth和JWT一样吗?

不一样。OAuth是授权协议;JWT是token格式。OAuth经常用JWT当access token,但也可以用不透明token。

面试时担心忘词?即答侠实时助你

即答侠 AI 实时监听面试对话,自动识别问题并即时生成回答建议——无感辅助,让你从容应对每一道题。

免费试用即答侠