J'ai fait face à un problème.
Lorsque vous ajoutez plusieurs en-têtes Set-Cookie à la réponse
headers.Add("Set-Cookie", "a=b;Path=/;");
headers.Add("Set-Cookie", "c=d;Path=/;");
en fait, ils sont combinés et un seul en-tête est envoyé avec des cookies séparés par des virgules
Set-Cookie: a=b;Path=/;,c=d;Path=/;
Selon RFC2109 c'est une syntaxe valide. Mais ce n'est pas conforme à RFC6265 , ce qui déprécie RFC2109
De plus, les derniers navigateurs ne prennent pas également en charge cette syntaxe séparée par des virgules. Testé sur IE9 , Firefox 13 et Google Chrome 20 .
Tous ces navigateurs ne prenaient que le premier cookie.
Veuillez voir l'exemple de projet ci-dessous
https://github.com/mnaoumov/cookie-bug/
Je veux trouver une solution de contournement.
Je m'attends à avoir deux en-têtes différents Set-Cookie .
J'ai essayé d'écrire certains MessageInspector pour réécrire les en-têtes HTTP. Je n'ai pas pu trouver comment accéder à ces en-têtes.
Des idées?
P.S. Technologie utilisée: API Web
Selon la réponse sur codeplex ( http://aspnetwebstack.codeplex.com/workitem/288 ) ce problème est connu et lié à l'auto-hébergement WCF et devrait être corrigé en passant à IIS hosting.
Il s'agit d'un problème WCF 4 marqué comme ne résoudra pas .
Trouvé une autre question avec le même résultat WCF 4.0 Cookie Only First is Recorded by Browser .
Vous pouvez utiliser 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);
Cela ajoutera plusieurs en-têtes set-cookies dans la réponse.
Modifier: vous devez également ajouter le
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"/>
dans votre web.config