3

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

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

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

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

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

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

设置 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。这又不是本意。

4

3 回答 3

1

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

于 2010-07-08T05:04:54.197 回答
0

我的理解是,对于每个 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 等)提供的任何东西?

于 2010-07-08T04:58:51.650 回答
0

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

结论:在 Firefox 上,我可以使用 CR 而不是 ',' 来分隔 cookie。

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

于 2010-07-08T06:29:56.563 回答