老师,我在设置cookie的时候已经存进去一个name了,为什么再次发一个请求的时候请求到的name是JSESSIONID而不是我设置的那个

来源:6-14 单点登录Redis存储Session及SessionId问题说明与集群实战-4

sj的程序之家

2018-02-07

/**
 * 读取cookie
 * @param request
 * @return
 */
public static String readLoginToken(HttpServletRequest request) {
    Cookie[] cookie = request.getCookies();
    System.out.println(cookie[0].getValue());
    if(cookie != null) {
        for(Cookie ck : cookie) {
            log.info("write cookieName:{}, cookieValue:{}", ck.getName(), ck.getValue());
            if(StringUtils.equals(ck.getName(),COOKIE_NAME)){
                log.info("return cookieName:{},cookieValue:{}",ck.getName(),ck.getValue());
                return ck.getValue();
            }
        }
    }
    return null;
}

正常登录之后已经存进去了。

http://img.mukewang.com/szimg/5a7ad2ef00017f6b11110028.jpg

但是再次发请求就变成这样了

http://img.mukewang.com/szimg/5a7ad349000150cc09770139.jpg

请求头中也只有这个JESSIONID而不是我自己设置的name值

http://img.mukewang.com/szimg/5a7ad368000156e409310185.jpg

写回答

4回答

Kokutou

2018-03-07

同样遇到过这个问题,搞了很长时间,最后发现,是我nginx的配置文件没写对造成的。

附上老师的配置文件截图

//img.mukewang.com/szimg/5aa00a8b0001966004870372.jpg

1
1
Geely
赞kokutou同学~
2018-03-11
共1条回复

Geely

2018-02-12

是这样的,查看cookie的地方从这里看。这个是火狐的,chrome也是一样的,课程里面有领着看。

//img.mukewang.com/szimg/5a8133540001886827341250.jpg


同学看看这里能否查到你设置的cookie呢


然后第二个问题,那个没有关系,但是要保证反序列化的时候是这个对象,正确的就可以。


1
0

Geely

2018-02-09

你好,同学,我看你设置的是mmall_login_token 这期间是否有清空浏览器cookie呢?

改造成mmall_login_token之后,我们不再需要关心jsessionId,只要关注login_token即可。没有清空cookie的话,应该不会消失的除非你设置的cookie的有效期非常短,或者设置成0才会发生。

同学再检查一下看看~~


1
3
sj的程序之家
老师,还有一个问题就是我后期改造成了spring session来处理session共享,但是读取出来的都是\x00\x01L\x00\x02idt\x00\x这种东西, 然后我尝试这先用JsonToObject把user先转成字符串传进去,但是redis读出来的还是\xAC\xED\x00\x05t\x00\xEF{"id":26,"username":"test110","password":"E10ADC3949BA59ABBE56E057F20F883E","email":"213123@qq.com","phone":"12313213211","question":"123456","answer":"123456","role":1,"createTime":"2018-02-04 13:27:26","updateTime":"2018-02-04 13:27:29"} 前面的那电应该怎么处理,或者有其他的处理方法么?
2018-02-09
共3条回复

sj的程序之家

提问者

2018-02-09

//img.mukewang.com/szimg/5a7cf94e0001874206660664.jpg这个是我设置cookie的图

public static void writeLoginToken(HttpServletResponse response, String token) {
   if(response == null) {
       throw new ParamException("响应参数异常");
   } else if (token == null) {
       throw new ParamException("token错误");
   }
   Cookie cookie = new Cookie(COOKIE_NAME, token);
   cookie.setDomain(COOKIE_DOMAIN);
   /**
    * 防止脚本攻击带来的信息泄露风险
    * 这个属性规定不许通过脚本访问cookie
    * 无法通过脚本获取cookie
    * 浏览器不会将信息发送给任何第三方
    */
   cookie.setHttpOnly(true);
   /**
    * 代表设置在根目录
    * 例子:
    * 比如设置为test,把么只有test文件夹下的才可以使用(生效)
    */
   cookie.setPath("/");
   /**
    * 设置cookie的存活时间
    * 如果设置成-1代表cookie永久存活
    * 单位是秒
    * 如果不设置,cookie不会写入硬盘,而是写在内存,只在当前页面有效
    */
   cookie.setMaxAge(60 * 60 * 24 * 365);
   log.info("write cookieName:{}, cookieValue:{}", cookie.getName(), cookie.getValue());
   /**
    * 把cookie放入响应中
    */
   response.addCookie(cookie);
}

0
1
Geely
是这样的,查看cookie的地方从这里看。
2018-02-12
共1条回复

Java企业级电商项目架构 Tomcat集群与Redis分布式

Tomcat集群+Redis分布式+代码重构+源码原理解析

2685 学习 · 947 问题

查看课程