tomcat - 如何设置 java servlet 使用的 cookie 版本(0 或 1)?

标签 tomcat servlets cookies

我正在寻找一种方法来配置我的 servlet 以使用 cookie 版本 0,据说它不允许 cookie 中的等号字符 (=) 以及其他非 URL 安全字符。

我有一台带有 ServletExec 的服务器,其中等号字符被自动丢弃(它使用的是 cookie 版本 0?)。我有 2 台其他带有 ServletExec 和 Tomcat 的服务器,其中不丢弃等号字符(显然他们使用的是 cookie 版本 1?)。我不知道为什么他们的行为不同。

所以我只需要帮助找到设置 cookie 版本的 servlet 配置,或者启用/禁用丢弃我的 cookie 中的等号字符。 TIA!

最佳答案

我会说它与 Tomcat 配置有关,而不是与 servlet 相关。

默认情况下,Tomcat 会尝试解析您的 cookie 值,并根据该值尝试“猜测”cookie 版本。更详细地说,如果它找到一些特定于版本 1 的字符,它将自动将 cookie 版本设置为 1。 IE。即使在您的 servlet 中将 cookie 值设置为 0,Tomcat 也会在响应呈现期间将其覆盖为 1。

要避免这种行为,您可以设置
org.apache.tomcat.util.http.CookieSupport.ALLOW_HTTP_SEPARATORS_IN_V0 属性为 true

此属性由 Tomcat 从系统属性中获取,即将此属性值设置为 true 可以使用设置系统属性、更新 catalina.properties 或任何其他合适的方式来完成。

有关完整的详细信息,请参阅 appendCookieValue 方法 org.apache.tomcat.util.http.ServerCookie

PS CookieSupport 类中还有一个 ALLOW_EQUALS_IN_VALUE 设置,这可能对您的情况有帮助。

关于tomcat - 如何设置 java servlet 使用的 cookie 版本(0 或 1)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25472623/

相关文章:

java - Tomcat 8 和 Jersey 2.7 返回 404 错误

java - 使用 Integer.parseInt 将 String 转换为 Int 不起作用

google-app-engine - 如何将过滤器关联到 Google App Engine 的 app.yaml 中的 servlet?

javascript - FF 中出现 "$.cookie is not a function"错误,即使我包含它

javascript - 如何使用 Ajax/jQuery 设置 cookie?

java - 如何正确地从 HTTPS 页面重定向?

java - 如何弄清楚 .class 文件的作用?

java - Tomcat 7 : Migration from Tomcat 6 - Invoker Servlet

java - servlet/servlet-mapping 和 filter/filter-mapping 之间的区别?

php - ZF2 读取 HTTP Cookie