核心内容摘要
深入解析8251A可编程串行接口:从引脚功能到实际应用配置
面试官问“现在都 2026 年了登录鉴权是不是该全切到 JWT 了”很多人会不假思索地点头“当然JWT 无状态、可扩展、跨域方便Session 早该被淘汰了。
”如果你这么回答恭喜你掉坑里了。
这时候面试官通常会补一刀“那如果用户手机丢了或者改了密码你怎么把旧的 JWT 立即作废”这一问往往能把 90% 的候选人问懵。
这篇文章就来聊聊为什么被吹上天的 JWT在很多大厂的核心业务里反而不如老土的 Session看懂本质差异在撕逼之前先对齐一下概念。
Session 方案类似于会员卡 账本用户登录服务端给一个sessionId会员卡号。
服务端在 Redis 或内存里存一份记录账本sessionId_123 { user_id: 1, role: admin }。
每次请求服务端查账本确认有效才放行。
核心特点服务端有状态Stateful控制权在服务端。
JWT 方案类似于现金用户登录服务端根据用户信息生成一串加密字符串钞票。
钞票上写着{ user_id: 1, role: admin, expire:
}。
服务端不存记录只负责发钱和验钞。
每次请求服务端解密验钞没过期就是真的。
核心特点服务端无状态Stateless控制权在客户端只要没过期就能用。
JWT 的致命死穴我想封杀你但做不到回到开头的面试题“怎么把旧的 JWT 立即作废”在 Session 方案里这太简单了。
你手机丢了客服后台点一下下线服务端把 Redis 里的sessionId删了。
下次那个手机再发请求查不到记录直接拒绝。
秒级生效。
但在 JWT 方案里服务器是不存状态的。
Token 发出去了就像泼出去的水。
只要还在有效期内比如 2 小时哪怕你把服务器重启了、把用户密码改了拿着旧 Token 的黑客依然能畅通无阻。
这时候你会想各种补救办法但你会发现每个办法都很尴尬
“那我把过期时间设短点比如 5 分钟”那用户每 5 分钟就得重新登录一次体验爆炸。
你说搞个 Refresh Token 自动续期那 Refresh Token 也是 Token它不需要作废吗如果 Refresh Token 被偷了黑客能无限续杯岂不是更危险
“那搞个黑名单Blacklist”用户注销时把这个 Token 记到 Redis 黑名单里。
每次请求都查一下是不是在黑名单。
打脸时刻兄弟你既然都要查 Redis 了为什么不直接用 SessionJWT 的最大优势就是无状态、不查库你现在每秒几万次请求都要查黑名单那 JWT 的性能优势还在哪为什么大厂特别是金融/支付偏爱 Session除了无法废止这个硬伤JWT 还有几个隐性成本大厂算得很精
续签Renewal问题Session 续签是无感的。
只要你一直在操作服务端就在 Redis 里顺手把你的过期时间往后延。
JWT 里的过期时间是写死在 Payload 里的。
想续签必须发一个新的 JWT 给你。
前端得写一堆拦截器逻辑发现快过期了 - 拿着旧 Token 换新 Token - 重发请求。
复杂度的天平从后端倾斜到了前端。
带宽占用Session ID 只有 32 个字节。
一个包含基本信息的 JWT动不动就几百个字节。
如果你的 Token 放在 Header 里每次 HTTP 请求都要多带几百字节的数据。
对于像淘宝、微信这种亿级流量的入口光是这多出来的流量成本就是一笔巨款。
数据实时性JWT 里的信息是快照。
你刚登录时是普通会员生成了 JWT。
下一秒你充钱成了 VIP。
但你手里的 JWT 写的还是普通会员。
除非你重新登录或者服务端在验证 Token 后再查一次库又回到了查库的老路否则你的 VIP 权益无法即时生效。
Session 每次都查 Redis天然保证数据是最新的。
那 JWT 到底有什么用把 JWT 贬得一文不值也不对。
存在即合理JWT 在以下场景是绝杀
微服务/服务间调用Machine-to-MachineA 服务调 B 服务不用维持长连接会话。
发一个短期的 JWTB 服务解密验证签名就知道是谁调的效率极高。
单次授权 Token比如重置密码链接、“邮箱验证链接”。
发一个 JWT 放在 URL 里有效期 10 分钟。
用户点开验签通过准许改密码。
用完即废不需要维持状态。
不想/不能做服务端存储比如一些简单的工具类网站没钱买 Redis只想撸个单机版 Node.js那 JWT 是真香。
面试怎么答简洁版30 秒JWT 最大的优势是无状态但也正是它的劣势。
因为无状态所以服务端无法主动废止 Token比如用户改密、被盗号场景。
要解决这个问题通常需要引入 Redis 做黑名单这就违背了 JWT 无状态的初衷。
相比之下Session Redis 方案虽然有状态但能做到精细化的权限控制和实时踢人下线。
对于复杂的 C 端业务Session 的安全性和控制力更好而 JWT 更适合微服务间的授权或一次性验证。
进阶版1 分钟带架构思考技术选型没有银弹只有取舍。
Session 的本质是控制服务端掌握绝对控制权适合对安全性要求高、需要实时管理用户状态的场景如电商、银行。
缺点是需要维护存储组件Redis有扩容成本。
JWT 的本质是交换用计算CPU 验签换存储内存/Redis。
适合服务间通信或者对即时性要求不高的应用。
如果很多大厂还在用 Session往往是因为他们的基础设施Redis 集群已经足够强大相比于 JWT 带来的无法废止风险他们更愿意承担存储成本来换取绝对的安全控制权。
最后
总结一句不要为了用新技术而用新技术。
如果你的业务需要此时此刻把这个讨厌的用户踢出去请老老实实拥抱 Session。
写在最后最近私信问我面试题的小伙伴实在太多了一个个回有点回不过来。
我花了两个周末把星球里大家公认最容易挂的Go/Java/AI 面试坑点整理成了一份PDF 文档。
里面不光有题还有解题思路和避坑指南。
想要的同学直接关注并私信我【面试】我统一发给大家。