【问题标题】:How to generate identical cookies from Java and from Javascript (without enclosing double-quotes)如何从 Java 和 Javascript 生成相同的 cookie(不包含双引号)
【发布时间】:2012-08-20 00:25:58
【问题描述】:

我尝试使从服务器端(在 Java 中)生成的 cookie 值与从 jquery's cookies librarie 生成的 cookie 值相同,它使用:

encodeURIComponent( value )

对 cookie 值进行编码。

让我们以这个示例字符串为例:

a b,c;d*~'"()!±

我在 Java 中使用this code 对 cookie 值进行编码:

String result = URLEncoder.encode(str, "UTF-8")
                          .replaceAll("\\+", "%20")
                          .replaceAll("\\%21", "!")
                          .replaceAll("\\%27", "'")
                          .replaceAll("\\%28", "(")
                          .replaceAll("\\%29", ")")
                          .replaceAll("\\%7E", "~");

然后我将 cookie 添加到响应中:

Cookie cookie = new Cookie("testCookieServerSide", encodeValue("a b,c;d*~'\"()!±"));
response.addCookie(cookie);

在值周围添加了双引号!

"a%20b%2Cc%3Bd*~'%22()!%C2%B1"

当使用 jquery 库编码相同的值时,我得到相同的值但没有双引号:

a%20b%2Cc%3Bd*~'%22()!%C2%B1

是否可以告诉 Java 生成双引号?我听说过 cookie.setVersion(0)cookie.setVersion(1) 但这似乎没有任何改变。

在服务器端检索这两个值时,它们在 : 之后是相同的

URLDecoder.decode(cookie.getValue(), "UTF-8");

... 双引号被删除。太好了。

但是在客户端,这两个值是不同的

alert($.cookies.get('testCookieServerSide')); => "a b,c;d*~'"()!±"
alert($.cookies.get('testCookieClientSide')); => a b,c;d*~'"()!±

知道如何生成完全相同的值吗?你是怎么处理的?

【问题讨论】:

  • 这是在黑暗中拍摄,但是如果您首先尝试编码/解码字符串值会发生什么(使用此处建议的函数:ecmanaut.blogspot.com/2006/07/…)我知道它已经过时了,但仅此而已我看到了在 javascript 中模拟 UTF8 的编码/解码。
  • 杰夫,感谢您的帮助。问题不在于字符是如何编码的,这在双方都是相同的。问题是 Java 在值周围添加了额外的双引号(当有特殊字符时)。
  • 感谢罗布森的评论。

标签: java javascript cookies urlencode


【解决方案1】:

这是我找到的解决方法:

我没有找到任何方法告诉 Java 停止添加这些双引号,所以我不得不忍受它们。

我修改了我使用的jquery's cookies library,所以不要像这样解码cookie值:

value = decodeURIComponent( pair[1] );

它使用:

value = decodeURIComponent( pair[1].replace( /^"(.*)"$/, '$1' ) );

当到达这行代码时,cookie中的值仍然被编码(js库本身在客户端对其进行编码,我在服务器端使用Java对其进行编码,使用上面的代码)。所以值的开头和结尾的双引号,如果不编码,必然是Java添加的字符……取值时必须去掉。

【讨论】:

  • 非常感谢,它帮助了我..:)
猜你喜欢
  • 2011-10-01
  • 2021-12-16
  • 1970-01-01
  • 2018-09-02
  • 1970-01-01
  • 1970-01-01
  • 2013-08-08
  • 1970-01-01
  • 2021-12-08
相关资源
最近更新 更多