请稍等 ...
×

采纳答案成功!

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

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

/**
 * 读取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;
}

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

https://img1.sycdn.imooc.com//szimg/5a7ad2ef00017f6b11110028.jpg

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

https://img1.sycdn.imooc.com//szimg/5a7ad349000150cc09770139.jpg

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

https://img1.sycdn.imooc.com//szimg/5a7ad368000156e409310185.jpg

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

4回答

Kokutou 2018-03-07 23:52:10

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

附上老师的配置文件截图

https://img1.sycdn.imooc.com//szimg/5aa00a8b0001966004870372.jpg

1 回复 有任何疑惑可以回复我~
  • Geely #1
    赞kokutou同学~
    回复 有任何疑惑可以回复我~ 2018-03-11 14:17:14
Geely 2018-02-12 14:26:13

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

https://img1.sycdn.imooc.com//szimg/5a8133540001886827341250.jpg


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


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


1 回复 有任何疑惑可以回复我~
Geely 2018-02-09 00:12:57

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

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

同学再检查一下看看~~


1 回复 有任何疑惑可以回复我~
  • 提问者 sj的程序之家 #1
    老师 这是我设置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);
        }
    
    浏览器那我也设置了,图在上面T.T,实在找不到原因了
    回复 有任何疑惑可以回复我~ 2018-02-09 09:29:15
  • 提问者 sj的程序之家 #2
    抱歉老师,代码粘贴过来乱了, 您看上面我那个回答
    回复 有任何疑惑可以回复我~ 2018-02-09 09:30:47
  • 提问者 sj的程序之家 #3
    老师,还有一个问题就是我后期改造成了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 23:14:06
提问者 sj的程序之家 2018-02-09 09:29:32

//img1.sycdn.imooc.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 回复 有任何疑惑可以回复我~
  • Geely #1
    是这样的,查看cookie的地方从这里看。
    回复 有任何疑惑可以回复我~ 2018-02-12 14:25:05
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信