tomcat8 中response addCookie 的时候会一直 An invalid character [34] was present in the Cookie value 有更新!

  |   4 评论   |   504 浏览

    刚跑起来的博客系统,登录经常超时,发现是 login 后添加 cookie 没有成功,抛了异常

    依赖的 latke 框架的 session 实现方式如下:

    try {
        JSONObject cookieJSONObject = new JSONObject();
        cookieJSONObject.put("userEmail", user.optString("userEmail"));
        cookieJSONObject.put("userPassword", user.optString("userPassword"));
        Cookie cookie = new Cookie("b3log-latke", cookieJSONObject.toString());
        cookie.setPath("/");
        cookie.setMaxAge(31536000);
        response.addCookie(cookie);
    } catch (Exception var6) {
        LOGGER.log(Level.WARN, "Can not write cookie", var6);
    }
    

    查了下貌似 tomcat8 之后Cookie的值不能包含 “,” " " 之类的字符。这里提供了 spring boot 的一种 hack 方式,然而并没有尝试是否可行。

    但是看起来这个问题是需要修改下存储的 value 值,不要包含上面的特殊字符,貌似也只能 latke 来解决了,这里说是会解决的,好像并没有。木有想到还能有啥方式。要是过两天还没找到方案,小弟准备把 session 自己整一个,替换掉框架自己的 session 得了。

    评论

    • moloee @88250 回复»

      :heart:

    • 88250 回复»

      看来需要一次彻底的修复,已经记录 issue 了,估计这周内完成,谢谢你的反馈 :smile:

    • moloee 回复»

      表示,一篇文章写完之后点发布,结果发现 session 丢了,真是有点尴尬。

    • moloee 回复»

      文章里打 emoji 表情。写数据库会报错。。

      org.b3log.latke.repository.jdbc.JDBCRepositoryException: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect string value: '\\xF0\\x9F\\x98\\x93' for column 'articleContent' at row 1"
      

      :cold<em>sweat:

    发表评论

    validate