我尝试使从服务器端(在 Java 中)生成的 cookie 值与从这个jquery 的 cookie 库生成的 cookie 值相同,它使用:
encodeURIComponent( value )
对 cookie 值进行编码。
让我们以这个示例字符串为例:
a b,c;d*~'"()!±
我在 Java 中使用此代码对 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)但这似乎并没有改变任何东西。
在服务器端检索这两个值时,它们在 a 之后是相同的:
URLDecoder.decode(cookie.getValue(), "UTF-8");
...双引号被删除。伟大的。
但是在客户端,这两个值是不同的!
alert($.cookies.get('testCookieServerSide')); => "a b,c;d*~'"()!±"
alert($.cookies.get('testCookieClientSide')); => a b,c;d*~'"()!±
关于如何生成完全相同的值的任何想法?你如何处理这个问题?