之前一篇文章简单介绍了下JWT的用法,涉及到token的签发和验证。有人说JWT不适合用于替换传统的 session+cookies 机制用于Web应用的用户登录状态维护,很大原因就是这块问题。
虽然之前的案例里面,我们可以成功在登录后获取一个Token,然后访问服务器的时候带着这个Token,服务器就可以知道当前访问的用户Uid了,假设现在有一下需求:登录后7天不用重复登录
超过30天没有访问网站则需重新登录,否则一直有效
修改密码功能
路
Token续签问题
对于第一个问题,我们可以在jwt的 Payload 里面设置一个过期时间,比如说7天,超过这个时间Token无效。但是如果只是简单的这么做的话就会带来另一个问题: 假如一个用户正在访问网站,突然Token失效了,用户就会掉登录,体验太差。
所以,大部分时候我们都是采用第二种策略: 超过xx天不访问网站则需要重新登录,如果中间连续访问网站的话则不要重新登录,对于很多手机App,我们可不希望用户天天输账号密码登录,但如果永久有效可能会带来一些安全问题。
这其实就是Token的续签问题,我们看一下网上提到的一些解决方案:
1.更新Payload里面的过期时间。
JWT的Payload里面可以设置一个过期时间,我们可以在用户每次访问的时候把这个过期时间更新一下。由于JWT的secret加密机制,只要exp变了,整个Token就变了,所以这种机制相当于每次重新颁发了一个新的Token。
这种方案简单粗暴,存在性能问题&