我遇到了一个问题。
向响应
添加多个 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
答案 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"/>