有关分布式session的一到面试题……

先说下我是怎么实现分布式session的

     用户登陆那段代码里面,用户登陆成功,我会通过uuid生成一个值作为token,将token返给前端并同时将该token为key,用户的id为value存储到redis中,并设置3天的过期时间。
     用户登陆成功后访问其他页面的时候,会被我配置的拦截器进行拦截,在请求里面。request.getHeader(“token”);获取到前端传递的token值,然后去redis中找到对应的用户id,将用户的信息 request.setAttribute(“uid”);
以上是我的一个分布式session功能的实现。

面试官:你这个设计有问题呀,如果用户正在操作呢,而此时token的过期时间已经到了,用户会被强制退出,这样用户体验会很不好呀?
想一想,你会怎么解决这个问题呢?

解决方案:(不希望每次拦截用户请求的时候都重新刷新token的过期时间值)

  1. springboot中的spring session能解决问题
    给出的答案,我没有去测试,只找到了篇blog:SpringBoot(八)SpringBoot整合springsession实现分布式session共享
  2. 自己的解决办法:用户登陆的时候,除了存储上述的key,额外使用 token+时间戳作为key(简称tt-key吧),value依旧是用户id,在拦截器中多增加一段业务逻辑:如果当前的时间和tt-key中时间戳相差小于一天,我们就将token中的过期时间刷新。这样就不会出现上面的情况,也保证了不会用户的每次请求都刷新token的过期时间值了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章