【问题标题】:Cannot get value from cookie in Java. Value contains commas.无法从 Java 中的 cookie 中获取值。值包含逗号。
【发布时间】:2011-01-14 17:10:45
【问题描述】:

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

我做错了什么。

【问题讨论】:

  • 您的问题最终解决了吗?你提交错误报告了吗?
  • 不,对此没有解决方案。我已经填补了谷歌分析的错误(gdata-issues,找不到更好的地方)。
  • 您是否找到了强制 Java 读取版本 1 (RFC 2109) 的方法?

标签: java cookies


【解决方案1】:

看看Cookie Documentation。它说:

这个类同时支持版本 0 (由 Netscape)和版本 1(由 RFC 2109) cookie 规范。经过 默认情况下,cookie 是使用创建的 版本 0 确保最佳 互操作性。

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

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

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

【讨论】:

    【解决方案2】:

    逗号是 http-header 值定义的一部分,因此 在 cookie 值中对逗号进行 URL 编码

    URLEncoder.encode(cookieValue);
    

    我发现了这个:

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

    RFC 说:

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

    更新:在您澄清您正在解析来自 google 的 cookie 之后:我查看了我所有的 __utmX cookie,它们都不包含逗号。那里的分隔符是|或url编码的:

    【讨论】:

    • 正如我上面写的:我没有设置 cookie。我只是想解析谷歌的 __umtv cookie。
    • @mynthon - 给我你网站的链接。我不相信 __utm cookie 有命令
    • 无法显示,因为它不在生产阶段,但我已经在我的网站上准备了演示:mynthon.net/_lab/gacookie
    • 很好奇..很好奇。我建议提交一份关于此的错误报告。
    【解决方案3】:

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

    【讨论】:

    • Google 在其“__utmv”cookie 中使用逗号,我必须解析 google cookie。
    • 啊。好的。那么当然你必须坚持Lombo的回答;-)
    猜你喜欢
    • 1970-01-01
    • 2013-07-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 2018-09-01
    • 2020-07-13
    相关资源
    最近更新 更多