java - 无法读取名称中带括号的 cookie(Java EE 8/Tomcat 8)

标签 java tomcat cookies

我正在尝试设置和获取名称中包含方括号的 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 名称中使用括号。

版本:

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

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

最佳答案

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

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

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

关于java - 无法读取名称中带括号的 cookie(Java EE 8/Tomcat 8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26391312/

相关文章:

java - 在 Eclipse 中配置多个动态 Web 项目之间共享库的最佳实践

swift - 带有 cookie 的 Alamofire 请求

java - JProfiler - 未检测到不同用户运行的jvm

java - 找出 YearMonth 实例的最后一天(在 LocalDate 中) - joda 库

java - 两个 Java 日期具有不同的格式

tomcat - hive-jdbc-standalone.jar 未由 tomcat 7 加载

java - JTable 中的结果集

java - 如何在 java.net.URLConnection 上指定本地地址?

php - Curl - 获取 JSESSIONID

javascript - 浏览器可以阻止本地存储吗?