c# - 严重的 CookieContainer 错误?

标签 c# web system.net cookiecontainer

我是不是遗漏了什么,或者这是 CookieContainer 中的错误?

我正在向容器中添加 3 个 cookie,然后我为 2 个 url 调用 GetCookieHeader 函数:

CookieContainer cc = new CookieContainer();

cc.Add(new Cookie("Cookie1", "1", "/a", "test.com"));
cc.Add(new Cookie("Cookie2", "2", "/a/0/", "test.com"));
cc.Add(new Cookie("Cookie3", "3", "/a/1/", "test.com"));

var result1 = cc.GetCookieHeader(new Uri("http://test.com/a/1/list"));
Assert.AreEqual("Cookie3=3; Cookie1=1", result1);

var result2 = cc.GetCookieHeader(new Uri("http://test.com/a/0/list"));
Assert.AreEqual("Cookie2=2; Cookie1=1", result2);

问题是最后一个断言抛出异常,因为返回的 header 仅为“Cookie2=2”。我看不出有任何理由可以省略 Cookie1 cookie - 根据 RFC6265,它应该返回两个类似于上面第一个断言的 cookie,不是吗?

几点说明:

  • cookie 都在容器中,所以问题不在于添加,而在于 GetHeader 函数。

  • 添加 4、5 等 cookie 时此行为保持不变:只有与最后添加的 cookie 匹配的路径才会包含基本路径的 cookie!

  • 当删除路径中的所有“a”并仅使用“/”、“/0/”和“/1/”作为 3 个 cookie 以及“http://test.com/1/list”和“的路径时,行为会发生变化http://test.com/0/list “在断言 URL 中)。然后所有断言都会成功 - 我希望“a”有相同的行为!

PS:让我添加规范中的相关部分:

如果至少满足以下条件之一,则请求路径路径匹配给定的 cookie 路径:

- cookie 路径和请求路径相同。

- cookie-path 是 request-path 的前缀,cookie-path 的最后一个字符是 %x2F ("/")。

- cookie-path 是请求路径的前缀,不包含在 cookie-path 中的请求路径的第一个字符是 %x2F ("/") 字符。

所以对我来说这显然是一个错误......?

最佳答案

我相信我找到了问题所在。在函数 InternalGetCookies(Uri) 的 System.Net.CookieContainer 类中,第 700-730 行附近有一个路径迭代。找到第一个路径后,添加这些 cookie,然后中断迭代,仅添加“/”的值!

换句话说:您只能从第一个匹配路径和“/”中获取cookie。对我来说,这是一个明显的不当行为,因此是一个错误 - 或者我不理解上面提到的 RFC。

关于c# - 严重的 CookieContainer 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27003836/

相关文章:

c# - 在运行时更新 app.config system.net 设置

vb.net - System.Net.IPAddress 返回奇怪的地址

c# - WinForm 控件事件处理程序顺序

c# - 如何使用 OpenXML SDK 2.5 从 word 文档中复制公式?

html - 此页脚文本的颜色设置在哪里?

jquery - .JS 拒绝启用菜单

html - <ul> 中的要点

c# - 如何清除 System.Net 客户端 DNS 缓存?

c# - F# 的标准类型事件是什么?

c# - VS 代码错误 "The .NET CLI tools cannot be located..."