由具有双引号的应用程序服务器设置的Cookie

时间:2013-01-31 12:51:52

标签: java servlets cookies jetty

我正在尝试在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了。但它似乎没有解决我的问题。

1 个答案:

答案 0 :(得分:8)

似乎Jetty 8(或更早版本)将以下字符视为Cookie中不允许的:"\\n\r\t\f\b%+ ;=HttpFields - > __COOKIE_DELIM)。如果其中一个字符包含在cookie的值中,则该值将用HTTP-Header中的双引号括起来。 URL-Encoding无法解决问题,因为那时你仍然会有%个字符。对我来说,这似乎是一个错误。我向Jetty mailing list发了一个问题。邮件列表上还有另一篇文章,解释了为什么在Jetty版本9中引发了cookie版本。