如何设置Java Servlet使用的Cookie版本(0或1)?

Zoo*_*oom 3 cookies tomcat servlets

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

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

因此,我只需要找到设置cookie版本或启用/禁用cookie中的等号字符的servlet配置的帮助即可。TIA!

Kon*_*gin 5

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

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

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

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

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

PS也有ALLOW_EQUALS_IN_VALUE在设置CookieSupport类,这可能是你的情况有所帮助。