【问题标题】:Adding multiple Set-Cookie Headers in ASP.NET Web在 ASP.NET Web 中添加多个 Set-Cookie 标头
【发布时间】:2012-07-17 01:05:30
【问题描述】:

我遇到了一个问题。

当您向响应中添加多个 Set-Cookie 标头时

headers.Add("Set-Cookie", "a=b;Path=/;");
headers.Add("Set-Cookie", "c=d;Path=/;");

实际上它们是结合在一起的,只有一个标头与逗号分隔的 cookie 一起发送

Set-Cookie: a=b;Path=/;,c=d;Path=/;

根据RFC2109,这是一个有效的语法。 但它不是根据RFC6265,它弃用了RFC2109

此外,最新的浏览器也不支持这种逗号分隔的语法。在 IE9Firefox 13Google Chrome 20 上测试。

所有这些浏览器都只获取第一个 cookie。

请看下面的示例项目

https://github.com/mnaoumov/cookie-bug/

我想找到一些解决方法。

我希望有两个不同的 Set-Cookie 标头。

我尝试编写一些 MessageInspector 来重写 HTTP 标头。我找不到如何访问该标题。

有什么想法吗?

附:使用的技术:Web API

【问题讨论】:

标签: web asp.net-web-api cookies


【解决方案1】:

你可以使用 HttpContext.Current.Response.SetCookie

using System.Web;


HttpCookie foo = new HttpCookie("foo", "true");
HttpContext.Current.Response.Cookies.Add(foo); 

HttpCookie bar = new HttpCookie("bar", "true");
HttpContext.Current.Response.Cookies.Add(bar);

这将在响应中添加多个 set-cookies 标头。

编辑:另外,你应该添加

<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"/>

在您的 web.config 中

【讨论】:

    【解决方案2】:

    根据 codeplex (http://aspnetwebstack.codeplex.com/workitem/288) 上的回答,此问题是已知问题,与 WCF 自托管有关,应通过迁移到 IIS 托管来解决。

    这是标记为不会修复的 WCF 4 问题。

    发现另一个问题,结果相同WCF 4.0 Cookie Only First is Recorded by Browser

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      相关资源
      最近更新 更多