java - IE 不接受来自 Tomcat servlet 过滤器的 cookie

标签 java tomcat servlets cookies servlet-filters

我设置了一个 servlet 过滤器来处理进入我网站的各种方式。过滤器的一个目标是在进入时设置一个 cookie。下面的代码在 Chrome、Safari 和 Firefox 中完美运行,但 IE 似乎不喜欢它。由于某些限制,我无法使用 JavaScript 设置 cookie。

Cookie cookie = new Cookie(COOKIE_NAME, COOKIE_VALUE);
cookie.setPath("/"); //Note: I've tried removing this.
cookie.setDomain(SITE_DOMAIN); //Note: I've tried removing this.
response.addCookie(cookie);

我尝试了最长使用期限和到期日期的不同组合,但似乎没有任何效果。我已经逐步调试了一个调试器,我确信代码正在执行。

另外,郑重声明,我使用的是 Tomcat 6。Cookie 名称和值都是长度约为 10 个字符的字符串。

最佳答案

当 cookie 值包含 version 0 cookies 的非法字符时,就会发生这种情况。 ,例如空白。这样的cookie值,一般容器会自动切换到version 1 cookies , IE9 或更早版本不支持。

您需要确保 cookie 值不包含版本 0 cookie 的非法字符。这在 Cookie#setValue() 中指定javadoc如下:

With Version 0 cookies, values should not contain white space, brackets, parentheses, equals signs, commas, double quotes, slashes, question marks, at signs, colons, and semicolons. Empty values may not behave the same way on all browsers.

如果您无法控制实际的 cookie 值,那么最好的办法是在设置之前对其进行URLEncode,并在检索期间对其进行URLDecode

另见:

关于java - IE 不接受来自 Tomcat servlet 过滤器的 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13981083/

相关文章:

java - 如何获取 Firestore 中文档内的集合数量?

java - 从 map 获取值(使用 Java 1.4)

java编译的类包含美元符号

java - Eclipse 调试器跳转到错误的返回语句

apache - 安全约束 web.xml url 模式安全

Tomcat6 部分忽略logging.properties

java - web.xml 并混合 no-auth 和 auth

java - 远程 MySQL DB 和 eclipse

tomcat - 如何在Tomcat中添加自定义 header ?

java - 在 java servlet 中处理 "multipart/related"