Set-Cookie Header с несколькими файлами cookie

У меня возникла проблема.

Когда вы добавляете в ответ несколько заголовков Set-Cookie

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

на самом деле они объединены и отправляется только один заголовок с куками с разделителями-запятыми

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. Используемая технология: веб-интерфейс

Ответ 1

В ответ на codeplex (http://aspnetwebstack.codeplex.com/workitem/288) эта проблема известна и связана с WCF самостоятельно -hosting и должен быть исправлен путем перехода на хостинг IIS.

Это проблема WCF 4, отмеченная как , не будет исправлена ​​.

Нашел другой вопрос с тем же результатом WCF 4.0 Cookie Only First записывается браузером.

Ответ 2

Вы можете использовать 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);

В ответ будет добавлен заголовок нескольких файлов cookie.

Изменить: также вы должны добавить

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

в вашем web.config