无法从Java中获取cookie的价值。值包含逗号。

时间:2010-02-09 08:01:18

标签: java cookies

我从包含逗号的cookie中获取值时遇到问题。它不返回完整的字符串,但字符串被截断为第一个逗号。例如:

// cookie value = var1,var2,var3
String cookieVal = cookie.getValue();
//cookieVal now is "var1" instead of "var1,var2,var3"

// cookie value = var1=var2=var3
String cookieVal = cookie.getValue();
//cookieVal now is "var1=var2=var3"

我做错了什么。

3 个答案:

答案 0 :(得分:5)

看看Cookie Documentation。它说:

  

此类支持版本0   (由Netscape提供)和版本1(由RFC提供)   2109)cookie规范。通过   默认情况下,使用创建cookie   版本0以确保最佳   互操作性。

如果你看到setValue方法,你会发现这个

  

对于版本0的cookie,值不应包含空格,括号,括号,等号,逗号,双引号,斜杠,问号,符号,冒号和分号。空值在所有浏览器上的行为可能不同。

编辑:只是阅读谷歌的东西。也许尝试将版本设置为1,看看它是如何工作的。

答案 1 :(得分:2)

逗号是http-header值定义的一部分,因此在您的Cookie值中使用url-encode逗号

URLEncoder.encode(cookieValue);

我发现了这个:

  

“此[cookie值]字符串是一系列字符,不包括在内   分号,逗号和空格。如果需要这样的话   名称或值中的数据,某些编码方法,如URL样式%XX   虽然没有定义编码,但建议使用编码   必需的“

RFC说:

  

非正式地,Set-Cookie响应头包含令牌Set-      Cookie:,后跟逗号分隔的一个或多个Cookie列表。      每个cookie都以NAME = VALUE对开头,后跟零或更多      以分号分隔的属性 - 值对。

更新:在您澄清您正在从谷歌解析cookie之后:我查看了所有__utmX cookie,但没有一个包含逗号。分隔符有|或网址编码:

答案 2 :(得分:0)

您确定需要在Cookie中存储一个集合吗? IMHO cookie不应用于存储除标识符之外的数据。数据存储应尽可能在服务器端完成。