Gibt es Probleme beim Zurücksenden eines Cookies während einer 302-Umleitung? Wenn ich beispielsweise ein Cookie für die Rückkehr zur URL erstelle und den Benutzer in derselben Antwort umleitung, ignoriert dann ein (moderner) Browser das Cookie?
http
cookies
http-status-code-302
Abdullah Jibaly
quelle
quelle
Antworten:
Die meisten Browser akzeptieren Cookies für 302 Weiterleitungen. Da war ich mir ziemlich sicher, aber ich machte eine kleine Suche. Nicht alle modernen Browser. Internetarchiv Link von einer jetzt entfernten / toten / Microsoft-Verbindung Q / A auf dem Silverlight Client HTTP-Stack ignoriert Set-Cookie bei 302 Redirect Responses (2010)
Ich denke, wir haben jetzt einen Ersatz für IE6 und es sind Windows Mobile-Browser ...
quelle
Laut diesem Blog-Beitrag: http://blog.dubbelboer.com/2012/11/25/302-cookie.html alle gängigen Browser, IE (6, 7, 8, 9, 10), FF (17), Safari (6.0.2), Opera (12.11) unter Windows und Mac setzen Cookies für Weiterleitungen. Dies gilt sowohl für 301- als auch für 302-Weiterleitungen.
quelle
Ein Hinweis (um Entwicklern das Leben zu retten):
IE und Edge ignorieren Set-Cookie in der Umleitungsantwort, wenn die Domäne des Cookies localhost ist .
Lösung:
Verwenden Sie 127.0.0.1 anstelle von localhost .
quelle
Hier ist der Chromium-Fehler für dieses Problem (Set-Cookie für HTTP-Antwort mit Status 302 ignoriert).
quelle
Dies ist ein wirklich verpönter Ansatz, aber wenn Sie sich wirklich nicht auf das 30-fache Verhalten des Set-Cookie-Browsers verlassen möchten, können Sie
meta http-equiv="refresh"
beim Setzen des Cookies eine HTML- Umleitung verwenden. Zum Beispiel in PHP:Der Server sendet ein Set-Cookie mit einer 200 anstelle einer richtigen 300-fachen Umleitung, sodass der Browser das Cookie speichert und dann die "Umleitung" durchführt. Der
<a>
Link ist ein Fallback für den Fall, dass der Browser die Metaaktualisierung nicht durchführt.quelle
Ich bin gerade auf dieses Problem mit Firefox und Safari gestoßen, aber nicht mit Chrome. Nach meinen Tests geschieht dies nur, wenn sich die Domäne während der Umleitung ändert. Dies ist typisch für einen OAuth2-Fluss:
Aus Gründen, die ich noch nicht herausgefunden habe, werden einige Cookies aus Anfrage 2 ignoriert, andere nicht. Wenn jedoch Anforderung 2 ein HTTP 200 mit einem
Refresh
Header zurückgibt (die "Meta Refresh" -Umleitung), werden Cookies durch Anforderung 3 ordnungsgemäß gesetzt.quelle
Dieses Problem ist bei der Verwendung von OpenIdConnect in .Net aufgetreten, wo eine separate API die Authentifizierung übernimmt und zur Hauptwebsite zurückleitet.
Zunächst müssen Sie die
CookieSecure
Option festlegenSameAsRequest
oderNever
damit umgehen, dass Siehttp://localhost/
nicht sicher sind. Siehe Michael Freidgeims Antwort.Zweitens muss auch das
CookieSameSite
Attribut auf gesetzt werdenLax
, sonst werden die Cookies nicht gespeichert.quelle
In meinem Fall habe ich CookieOptions.Secure = true gesetzt, es aber auf http: // localhost . Getestet und Cookies entsprechend der Einstellung im Browser ausgeblendet .
Um ein solches Problem zu vermeiden, können Sie die Option Cookie Secure so einstellen, dass sie mit dem Protokoll Request.IsHttps übereinstimmt, z
quelle
Set-Cookie
Headern bei 302-Weiterleitungen tun .secure=request.is_secure
in Kolben.