我正在尝试在Servlet响应中设置一个值为unkown#4?Wn5pZ1JwQnlLEGRJAgB4WQU%3D的cookie。
但是当我在浏览器中设置cookie时,会返回带有它的引号,如下所示:
“未知#4?Wn5pZ1JwQnlLEGRJAgB4WQU%3D”。
为什么会这样?我们使用Jetty作为应用程序服务器。
我会把我写的代码
String cookieValue = "unkown#4?Wn5pZ1JwQnlLEGRJAgB4WQU%3D";
Cookie zedoCookie = new Cookie("cookiename", cookieValue);
zedoCookie.setMaxAge(31536000); // this is one year duration.
zedoCookie.setDomain("somedomain.com");
zedoCookie.setPath("/");
response.addCookie(zedoCookie);
有人可以对此有所了解吗?
我已经看过this了。但它似乎没有解决我的问题。
答案 0 :(得分:8)
似乎Jetty 8(或更早版本)将以下字符视为Cookie中不允许的:"\\n\r\t\f\b%+ ;=
(HttpFields - > __COOKIE_DELIM
)。如果其中一个字符包含在cookie的值中,则该值将用HTTP-Header中的双引号括起来。
URL-Encoding无法解决问题,因为那时你仍然会有%
个字符。对我来说,这似乎是一个错误。我向Jetty mailing list发了一个问题。邮件列表上还有另一篇文章,解释了为什么在Jetty版本9中引发了cookie版本。