【问题标题】:CookieContainer.SetCookies only sets the first oneCookieContainer.SetCookies 只设置第一个
【发布时间】:2015-10-05 19:46:42
【问题描述】:

根据MSDNCookieContainer.SetCookies应该

为来自 HTTP cookie 的一个或多个 cookie 添加 Cookie 实例 特定 URI 的 CookieContainer 标头

这意味着它应该适用于多个 cookie,但是当我这样做时

_cookieContainer.SetCookies(new Uri("http://localhost"), "a=a;b=b");

稍后尝试使用

检索cookie
_cookieContainer.GetCookies(new Uri("http://localhost"));

我只得到一个 cookie 条目,即 a=a

我认为可能是cookie头格式错误,所以我使用.Add方法手动添加了两个cookie,后来尝试通过调用.GetCookieHeader获取头,我得到完全相同的字符串"a=a;b=b" .

我是否遗漏了什么或者我只是发现了一个 .NET 错误?我目前正在使用

VS2015 - v14.0.23107.0,
.NET - 4.6 4.6.00081

【问题讨论】:

    标签: c#


    【解决方案1】:

    你为什么不尝试像MSDN在SetCookies的文档站点上建议的那样传递第二个参数:

    cookie标头

    类型:System.String

    HTTP 服务器返回的 HTTP set-cookie 标头的内容,Cookie 实例由 逗号 分隔。

    _cookieContainer.SetCookies(new Uri("http://localhost"), "a=a,b=b");
    

    【讨论】:

    • @Steve 每隔一段时间就会发生在每个人身上:-)
    • 知道为什么它是逗号,尽管 HTTP 标头使用分号?
    • 可能是因为每个“set-cookie”标头可能包含以分号分隔的元数据: set-cookie: session-id=144-7242129-2595520;路径=/;域名=.blahblahlbah.com; expires=Tue, 01-Jan-2025 06:00:01 GMT set-cookie: session-id-datetime=2082787201l;路径=/;域名=.blahblahlbah.com; expires=2025 年 1 月 1 日星期二 06:00:01 GMT
    【解决方案2】:

    您使用分号来分隔 cookie,但 MSDN docs 状态:

    SetCookies 从 HTTP cookie 标头中提取所有 HTTP cookie,为每个构建一个 Cookie,然后将每个 Cookie 添加到与 URI 关联的内部 CookieCollection。 cookieHeader 字符串中的 HTTP cookie 必须用逗号分隔。

    (强调)

    【讨论】:

      猜你喜欢
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 2012-12-23
      • 2018-06-17
      • 1970-01-01
      • 2017-07-30
      相关资源
      最近更新 更多