【问题标题】:Unable to read cookies with brackets in name (Java EE 8/Tomcat 8)无法读取名称中带括号的 cookie (Java EE 8/Tomcat 8)
【发布时间】:2014-10-17 23:45:35
【问题描述】:

我正在尝试设置和获取名称中包含方括号的 cookie。我可以在 PHP 中做到这一点,但在 Java 中读回 cookie 对我不起作用。这是在我的 JSP 中设置 cookie 的代码:

Cookie testCookie = new Cookie("test[cuid]", "test1");
Cookie testCookie2 = new Cookie("test", "test2");

testCookie.setMaxAge(60);
testCookie2.setMaxAge(60);

response.addCookie(testCookie);
response.addCookie(testCookie2);

这里是读取cookies的代码:

Cookie[] cookies = request.getCookies();
if(cookies != null){
    out.println("# Cookies: " + cookies.length + "<br/>");

    for (Cookie cookie : cookies){
        out.print("Name: " + cookie.getName( ) + " - ");
        out.print("Value: " + cookie.getValue( ) + "<br/>");
    }
}
else {
    out.println("No cookies found");
} 

结果:

# Cookies: 2
Name: JSESSIONID - Value: DD299706C704FE80BC99C10EA2C6E9F9
Name: test - Value: test2

我可以在 Chrome 中看到两个 cookie 都设置了正确的名称和值。当我遍历 cookie 时,只会显示“测试”cookie; “test[cuid]” cookie 没有出现。我发现了一些其他人在 Tomcat 抛出带有特殊字符的 cookie 时遇到的问题,但我还没有找到解决方案。据我所知,RFC 2109 并没有明确禁止版本 1 cookie 名称中的括号。

版本:

  • 铬 37.0.2062.124 m
  • Apache Tomcat 8.0.9.0
  • Java EE 8
  • Spring 框架 4.0.1

编辑:我应该注意,这里的目的是检索由另一个 Web 服务设置的 cookie,因此任何涉及更改 cookie 名称的解决方案都不可行。

【问题讨论】:

    标签: java tomcat cookies


    【解决方案1】:

    我仍然不知道如何强制 Tomcat 接受我的 cookie,但我现在至少有一个解决方法。我打电话

    String cookies = request.getHeader("Cookie");
    

    然后自己解析它,即用分号“;”标记它然后等于“=”。

    【讨论】:

      猜你喜欢
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多