具有多个Cookie的Set-Cookie标头

时间:2012-07-18 03:27:58

标签: api cookies web

我遇到了一个问题。

向响应

添加多个 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

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

所有这些浏览器都只使用了第一个cookie。

请参阅下面的示例项目

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

我想找到一些解决方法。

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

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

有什么想法吗?

P.S。使用的技术:Web API

2 个答案:

答案 0 :(得分:9)

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

这是WCF 4问题,标记为无法修复

找到另一个问题,结果相同[{3}}。

答案 1 :(得分: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"/>
中的