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