【问题标题】:JBoss 5.1.0 (JSF/Seam) cookies blowing up with accented charactersJBoss 5.1.0 (JSF/Seam) cookie 带有重音字符
【发布时间】:2010-06-02 10:59:24
【问题描述】:

我在 JBoss 4.2.3 中看不到这种行为。如果我尝试在 HttpServletResponse 上调用 addCookie() 并且我的 cookie 值中包含重音字符(例如ç),我会收到以下异常: java.lang.IllegalArgumentException:cookie 值中的控制字符,考虑 BASE64 编码您的值

有谁知道 JBoss 5.1.0 中的哪些更改可能会导致这些问题?

【问题讨论】:

    标签: java servlets cookies jboss


    【解决方案1】:

    显然他们修复了一个错误,因此 cookie 名称现在最终符合 RFC2109

    另见javax.servlet.http.Cookie API specification

    名称必须符合 RFC 2109。这意味着它只能包含 ASCII 字母数字字符,并且不能包含逗号、分号或空格或以 $ 字符开头。创建后无法更改 cookie 的名称。

    带有后缀ç 的c 不是ASCII character


    更新:抱歉,问题与 cookie 有关。这与this Tomcat bugfix 相关(JBoss 在后台使用 Tomcat)。这应该可以通过如下设置 cookie 版本来解决:

    cookie.setVersion(1);
    

    根据旧的 Netscape 规范,ç 不是 cookie 值的有效字符,但它符合较新的 RFC2109 规范。使用Cookie#setVersion(),您可以在它们之间切换。

    【讨论】:

    • 该问题询问的是 cookie 值,而不是 cookie 名称。
    • @Photodeus:我明白了。我更新了答案。感谢您的纠正。
    • 我已经通过base64编码某些cookie值(并在读取时解码)解决了这个问题。我尝试将 cookie 版本设置为 1,但这并没有解决问题。另外,根据我的阅读,在 IE7 中将 cookie 版本设置为 1 中断。有谁知道 JBoss 5.1.0 有什么不同,因为在 4.2.3 中我能够毫无问题地传递带有重音符号的值。
    猜你喜欢
    • 2011-04-26
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 2010-10-31
    • 2012-06-09
    • 2013-03-28
    • 1970-01-01
    相关资源
    最近更新 更多