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

我从包含逗号的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" 

我究竟做错了什么。

看一下Cookie文档 。 它说 :

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

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

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

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

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

 URLEncoder.encode(cookieValue); 

我找到了这个:

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

RFC说:

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

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

您确定需要在cookie中存储一组吗? IMHO cookie不应用于存储除标识符之外的数据。 应尽可能在服务器端进行数据存储。