什么是无状态?JWT为什么是无状态的?结合Redis后,还是无状态吗?

虽然JWT本身是无状态的,但结合Redis或其他存储机制后,系统其实就不再是完全无状态的了,而是部分有状态的了。

什么是无状态?

首先,什么是无状态呢?
无状态指的是:每个请求都是独立的、互相无关联的,处理本次请求时,无需依赖过去请求的内容。每次请求都必须包含服务器所需的所有信息。

JWT为什么是无状态的?

JWT就是因为它本身就包含了服务器验证时,所需要的一切必要信息(用户身份、过期时间、签名等),而这些信息并不需要服务器去存储、管理,服务器只要解析验证JWT就行,不用再去数据库进行查询这个JWT的状态(即是否还有效),所以说JWT本身的机制就是无状态的。

对比有状态机制

而对比Web中的Session,它就是有状态的。为什么呢?因为用户登录时,服务器会保存会话状态,而客户端只需在请求中携带会话ID即可。此时服务器就是在记录用户会话的“状态”,所以说是有状态的。

结合Redis后,还是无状态吗?

在结合Redis使用时,服务器就会把token存储在Redis中,此时就可以自由灵活地控制token是否有效。比如触发用户注销、管理员拉黑名单等操作时,服务器可以直接设置Redis中的token的“状态”,宣布为无效。又或是客户端去定时刷新token来保证会话的持久有效。这些行为都是将Token从“无状态”变为了“有状态”。
所以在这种情况下,Token本身仍然是无状态的,只是在服务器中增加了一个“状态管理层”(即使用Redis管理token),所以此时系统的验证机制就可以说是“有状态”的了。而不是“无状态”。严格来说,是“部分有状态”的。

总结

给JWT增加了有状态的部分机制后,给系统带来的好处是很多的。能够让整个验证机制更加灵活、大大地提升用户的体验,并且便于更加多样性地扩展、改造验证功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值