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