请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

cookie-redis存储(有效期内重复存储)

老师,这里关于cookie以及设置失效时间,我做了一个简单的测试,首先登录进入到to_list后,在redis中会生成两个key,每次刷新当前页面都会生成一个key。我觉得一个用户在redis中只存在一个key。如果失效(删除),就会重新生成一个key。在有效期内,每次登录应该用的还是同一个cookie,也就是redis中对应的某一个key。老师,你什么看?

正在回答 回答被采纳积分+3

2回答

Yukileson 2021-01-28 21:25:32

所以这里是老师写的有问题吗..按照老师这样写 确实每次一刷新都会新增一个token

应该要怎么处理

0 回复 有任何疑惑可以回复我~
  • 不设置cookie的有效期,让它永远有效,给redis中的token设置个有效期,如果cookie中的token过期 重新生成
    回复 有任何疑惑可以回复我~ 2021-01-29 12:56:18
若鱼1919 2019-11-12 09:08:38

你说的对 只有登陆成功的时候才需要生成token

0 回复 有任何疑惑可以回复我~
  • //更新缓存时间
        private void addCookie(String token,HttpServletResponse response,User user){
            Cookie cookie = new Cookie(COOKIE_NAME_TOKEN,token);
            cookie.setMaxAge(TokenKey.tokenKey.expireSeconds());
            response.addCookie(cookie);
            if (redisService.get(TokenKey.tokenKey,token,User.class)==null){
                redisService.set(TokenKey.tokenKey,token,user);
                cookie.setPath("/");
            }else {
                redisService.setExpire(TokenKey.tokenKey,token);//更新缓存时间
            }
        }
    
    
    老师改成这样你觉得呢
    
        //重新设置过期时间
        public <T> boolean setExpire(KeyPrefix prefix,String key){
            Jedis jedis = null;
            try{
                jedis = jedisPool.getResource();
                String realKey = prefix.getPrefix()+key;
                int sec = prefix.expireSeconds();
                jedis.expire(realKey,sec);
                return true;
            }finally {
                if (jedis!=null) {
                    jedis.close();
                }
            }
        }
    回复 有任何疑惑可以回复我~ 2019-11-12 19:09:00
  • 若鱼1919 回复 肖小小 #2
    cookie可以不设置有效期,redis的key每次重新set一下就好了
    回复 有任何疑惑可以回复我~ 2019-11-13 08:49:16
  • 肖小小 回复 若鱼1919 #3
    为什么呀  cookie是会自动延期的吗
    回复 有任何疑惑可以回复我~ 2019-11-13 21:35:41
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信