我正在寻找一种方法来配置我的 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/