Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从Java中的cookie获取值。值包含逗号。_Java_Cookies - Fatal编程技术网

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

无法从Java中的cookie获取值。值包含逗号。,java,cookies,Java,Cookies,我无法从包含逗号的cookie中获取值。它返回的不是完整的字符串,而是截断到第一个逗号的字符串。例如: // cookie value = var1,var2,var3 String cookieVal = cookie.getValue(); //cookieVal now is "var1" instead of "var1,var2,var3" 及 我做错了什么。逗号是http头值定义的一部分,因此url在cookie值中编码逗号 URLEncoder.encode(cookieValu

我无法从包含逗号的cookie中获取值。它返回的不是完整的字符串,而是截断到第一个逗号的字符串。例如:

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


我做错了什么。

逗号是http头值定义的一部分,因此url在cookie值中编码逗号

URLEncoder.encode(cookieValue);
我发现:

“此[cookie value]字符串是一个字符序列,不包括 分号、逗号和空格。如果需要放置 名称或值中的数据,某些编码方法,如URL样式%XX 建议使用编码,但未定义或修改编码 必需的“

报告说:

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

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

请查看。它说:

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

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

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


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

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

Google在其“\uuuUTMV”cookie中使用逗号,我必须解析Google cookie.Ah。可以当然,你必须坚持Lombo的答案;-)正如我在上面写的:我没有设置cookie。我只是想解析谷歌的umtv cookie。@mynthon-给我你网站的链接。我不相信这个uu_u-utm cookie已经不能显示了,因为它还没有进入生产阶段,但我已经在我的网站上准备了演示:好奇..非常好奇。我建议你提交一份bug报告。你最终解决了你的问题吗?你提交错误报告了吗?没有,没有解决方案。我已经解决了google analytics的bug(gdata问题,找不到更好的地方了)。您是否找到了一种方法来强制Java阅读版本1(RFC2109)?
URLEncoder.encode(cookieValue);