¿Hay algún problema con el envío de una cookie durante un redireccionamiento 302? Por ejemplo, si creo una cookie de retorno a la URL y redirijo al usuario en la misma respuesta, ¿algún navegador (moderno) ignorará la cookie?
http
cookies
http-status-code-302
Abdullah Jibaly
fuente
fuente
Respuestas:
La mayoría de los navegadores aceptan cookies en redireccionamientos 302. Estaba bastante seguro de eso, pero hice una pequeña búsqueda. No todos los navegadores modernos . El enlace de archivo de Internet de una sesión de preguntas y respuestas de Microsoft Connect ahora eliminada / muerta / Microsoft Connect en Silverlight Client HTTP Stack ignora Set-Cookie en 302 Redirect Responses (2010)
Creo que ahora tenemos un reemplazo para IE6 y son los navegadores de Windows Mobile ...
fuente
Según esta publicación de blog: http://blog.dubbelboer.com/2012/11/25/302-cookie.html todos los principales navegadores, IE (6, 7, 8, 9, 10), FF (17), Safari (6.0.2), Opera (12.11) tanto en Windows como en Mac, configuran cookies en las redirecciones. Esto es cierto para las redirecciones 301 y 302.
fuente
Un aviso (para salvar la vida del desarrollador):
IE y Edge ignoran Set-Cookie en la respuesta de redireccionamiento cuando el dominio de la cookie es localhost .
Solución:
Utilice 127.0.0.1 en lugar de localhost .
fuente
Aquí está el error de Chromium para este problema (la cookie de configuración se ignora para la respuesta HTTP con estado 302).
fuente
Este es un enfoque realmente desaprobado, pero si realmente no desea confiar en el comportamiento del navegador de cookies configuradas 30x, puede usar un
meta http-equiv="refresh"
"redireccionamiento" HTML al configurar la cookie. Por ejemplo, en PHP:<?php ... setcookie("cookie", "value", ...); url="page.php"; ?> <html> <head><meta http-equiv="refresh" content=1;url="<?=$url?>"></head> <body><a href="<?=$url?>">Continue...</a></body> </html>
El servidor enviará Set-Cookie con un 200 en lugar de un redireccionamiento 300x adecuado, por lo que el navegador almacenará la cookie y luego realizará el "redireccionamiento". El
<a>
enlace es un respaldo en caso de que el navegador no realice la meta actualización.fuente
Me acabo de encontrar con este problema con Firefox y Safari, pero no con Chrome. Según mis pruebas, esto solo sucede cuando el dominio cambia durante la redirección. Esto es típico en un flujo de OAuth2:
Por razones que aún no he descubierto, algunas cookies de la solicitud 2 se ignoran y otras no. Sin embargo, si la solicitud 2 devuelve un HTTP 200 con un
Refresh
encabezado (la redirección de "meta actualización"), las cookies se configuran correctamente mediante la solicitud 3.fuente
samesite=strict
. Para la solicitud de devolución de llamada, el navegador todavía piensa que el creador es Google (o cualquier proveedor de oauth que use). Por lo tanto, si configura un samesite = cookie estricta en su respuesta 302, entonces el navegador probablemente piense "¡ah, ja! Esta es una solicitud entre sitios proveniente de Google a su sitio" y, por lo tanto, no envía la cookie cuando solicita la URL redirigida. La solución es usar una meta-actualización como lo hizo, por lo que su solicitud proviene de su propio sitio. Podría estar hablando tonterías, pero ese es mi pensamiento actual.Encontré este problema mientras usaba OpenIdConnect / IdentityServer en .Net, donde una API separada (nombre de host diferente) maneja la autenticación y redirige al sitio principal.
Primero (para el desarrollo en localhost) debe establecer la
CookieSecure
opciónSameAsRequest
oNever
para hacer frente ahttp://localhost/
no ser seguro. Vea la respuesta de Michael Freidgeim .En segundo lugar, debe establecer el
CookieSameSite
atributo enLax
; de lo contrario, las cookies no se guardan en absoluto.Strict
no funciona aqui!fuente
En mi caso, configuré CookieOptions.Secure = true, pero lo probé en http: // localhost ., Y el navegador oculta las cookies de acuerdo con la configuración.
Para evitar este problema, puede hacer que la opción de cookies sea segura para que coincida con la solicitud del protocolo.
fuente
Set-Cookie
Sin embargo, todo esto es ortogonal a lo que hacen los navegadores con los encabezados en las redirecciones 302.secure=request.is_secure
en matraz.