【问题标题】:location of firefox source code that parses Set-Cookie header?解析 Set-Cookie 标头的 Firefox 源代码的位置?
【发布时间】:2011-03-13 03:49:21
【问题描述】:

有人可以请我指向解析 Set-Cookie 标头的 Firefox 源代码吗?我想了解确切的行为。

如果您想知道原因,请进一步阅读? 对于我的应用程序中的各种约束,我需要在单个 Set-Cookie 标头中传递多个 cookie。 RFC-2109 明确提到,

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

所以我应该能够通过以下 Set-Cookie 标头

Set-Cookie: name1=value1; attr11=attrval11; attr12=attrval12,name2=value2; attr21=attrval21; attr22=attrval22;

它不起作用。但是,以下确实有效

Set-Cookie: name1=value1, name2=value2; attr1=attrval1; attr2=attrval2;

而且,我想为不同的 cookie 赋予不同的属性。

[更新]

真实例子

示例#1-

设置-Cookie: cookie1=value1;路径=/,cookie2=value2;路径=/

在这种情况下,firefox 解析并从中获取第一个 cookie(其名称为“cookie1”,值为“value1”)(第二个被完全忽略)

例子#2-

设置-Cookie: cookie1=value1,cookie2=value2;路径=/

在这种情况下,firefox 认为存在一个名为“cookie1”且值为“value1,cookie2=value2”的 cookie。这又不是我们的本意。

【问题讨论】:

    标签: java firefox cookies jakarta-ee setcookie


    【解决方案1】:

    快速浏览MXR 表明主要逻辑在nsCookieService::SetCookieInternal 中。您可以根据需要来回跟踪链接。至于您的实际问题,如果您提供一个真实的示例标题可能会有所帮助。

    【讨论】:

      【解决方案2】:

      我的理解是,对于每个 Set-Cookie 标头的多个 cookie,浏览器实现标准的方式略有不同。但是,您可以发送多个 Set-Cookie 标头来设置多个 cookie 的值:

      Set-Cookie: name1=value1; attr11=attrval11; attr12=attrval12
      Set-Cookie: name2=value2; attr21=attrval21; attr22=attrval22
      

      尽管有什么理由让您手动设置响应的标头而不是使用您的框架(PHP、ASP.NET、RoR 等)提供的任何东西?

      【讨论】:

      • 谢谢,但我无法发送多个 Set-Cookie 标头。我正在使用 J2EE,标准方法是使用 HttpServletResponse.addCookie(Cookie cookie)。但是,这最终会生成多个我不想要的 Set-Cookie 标头。
      • 我不能有多个 Set-Cookie 标头的原因是响应通过了一个网关服务器,该网关服务器是用 Mule 实现的,它有一个错误(mulesoft.org/jira/browse/MULE-4418)并且忽略了除一个之外的所有具有特定名称的标头。而且,如果不更改源代码并重建 mule-http-transport 模块,就不可能在 mule 中修复它。
      【解决方案3】:

      好吧,从源代码中可以清楚地看到,firefox 在这方面没有实现 RFC-2109,而是使用 CR 或 LF 而不是 ',' 作为 cookie 分隔符(http://mxr.mozilla.org/mozilla-central/source/netwerk/cookie/nsCookieService.cpp 中的通知行#1934、1959、1990 )。我在 Firefox v3.6.6 上都试过了,CR 可以工作,但 LF 不行。

      结论:在 Firefox 上,我可以使用 CR 代替 ',' 来分隔 cookie。

      故障:(CR, LF, ',') 中没有一个在 Internet-Explorer 上工作。现在有人可以指出我的 IE 的“源”代码,在那里我可以看到他们使用什么作为 cookie 分隔符:-)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-04
        • 1970-01-01
        • 2016-07-19
        • 2020-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多