web-dev-qa-db-ja.com

複数のCookieを持つSet-Cookieヘッダー

問題に直面しました。

複数のSet-Cookieヘッダーを応答に追加する場合

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

実際にはそれらは結合され、1つのヘッダーのみがコンマ区切りのCookieで送信されます

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

RFC2109 によると、これは有効な構文です。しかし、それは RFC6265 に従わず、これはRFC2109を非推奨にします

さらに、最新のブラウザはこのコンマ区切りの構文もサポートしていません。テスト済みIE9Firefox 13およびGoogle Chrome 20

これらのブラウザーはすべて、最初のCookieのみを取りました。

以下のサンプルプロジェクトをご覧ください

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

回避策を見つけたいです。

2つの異なるSet-Cookieヘッダーが必要です。

HTTPヘッダーを書き換えるために、いくつかMessageInspectorを書き込もうとしました。そのヘッダーにアクセスする方法が見つかりませんでした。

何か案は?

追伸使用技術:Web API

34
mnaoumov

codeplexhttp://aspnetwebstack.codeplex.com/workitem/288 )の回答によると、この問題は既知の問題ですWCFセルフホスティングに関連しており、IISホスティングに移動して修正する必要があります。

これは、と修正されないとマークされたWCF 4の問題です。

同じ結果の別の質問が見つかりました WCF 4.0 Cookie Only First is Recorded by Browser

9
mnaoumov

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で

1
tom2020