php接口开发如何刷新token

在用户登录之后会将用户用户id 登录ip 通过一些算法加密
加密之后将用户token写入数据库并且写入缓存 (redis)
写入缓存的目的是每次客户端请求要获取用户id 写入数据库是想在用户做了修改密码之类的操作 将token清空

但是写入缓存是 1 个小时 redis在到期之后就没了 如何做到到期之后可以继续使用

自己有一个思路 就是如果在缓存中查询不到就去数据库查询 数据库中查询到了直接返回再次写入缓存

但是这种实现的方式好像不太好 各位大神有什么好的办法吗?

阅读 4.6k
5 个回答

增加时长,比如15天

应该有两个token,一个是access_token,一个是refresh_token,同时返回给客户端,但是有差别。
1.过期时间不一样,access_token过期时间应该设置短一点,比如1个小时,refresh_token过期时间相对长一点,比如一周。
2.access_token是用户的凭证,1个小时候就过期了,过期之后只能用refresh_token去重新获取一对新的token,refresh_token只能使用一次。

如果token不是随机的,那加时效有何意义,token都已经按照你给的方式加密,验证了。

你说的方法针对小型站点可行,但是对于大型网站,当大量用户缓存过期的时候,大量的请求会进入数据库,所以并不可取.我的解决方法是,生成token时,假设token有效期为24小时,同时把用户id和token过期时间放入消息队列中,这个消息队列会一直循环检测token即将过期的用户,一旦检测到token不足2小时就会过期,则立即重新生成新的token.如果网站用户特别多,考虑把前面的token有效期和2小时适度调大一些,或者考虑分布式消息队列方案.另外,token更新频繁,完全没有存库的必要..............................好了,我编不下去了............

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题