friday - ¿Cómo puedo compartir una sesión asp.net entre http y https
black friday 2018 (4)
Leí que una página que se ejecuta bajo una conexión https no puede compartir una sesión InProc (basada en cookies) con otra página (o lo mismo para ese caso) que se ejecuta en http habitual. Mi sitio se ejecuta en Server 2003, IIS 6 y .Net 2.0.
Después de algunos experimentos, parece que una página que almacena datos en sesión mientras se está conectado a través de https CAN accede posteriormente a los datos, incluso si se ejecuta en http plano.
Entonces, ¿es posible o debo revisar y buscar fallas en la configuración de SSL?
La búsqueda del problema no muestra mucha charla al respecto hasta ahora, sigue buscando.
Editar : está bien encontrar algunas cosas ahora.
Correcto, parece que funcionará bien si ambos conjuntos de páginas están en la misma aplicación / sitio web.
Así que seguiría adelante y seguiré sintiéndome tranquilo.
Configuración de IIS En la ventana de propiedades de IIS, en la pestaña ASP -> Propiedades de sesión, hay una configuración para "Nueva ID en conexiones seguras"
Me arreglé este problema intermitente estableciendo esto en falso.
Desde MSDN :
Cuando un usuario se mueve hacia adelante y hacia atrás entre áreas seguras y públicas, la cookie de sesión generada por ASP.NET (o URL si ha habilitado el estado de sesión sin cookies) se mueve con texto plano, pero la cookie de autenticación nunca se pasa por HTTP no encriptado. conexiones siempre que se establezca la propiedad Secure cookie .
Básicamente, la cookie se puede pasar tanto por HTTP como por HTTPS si la propiedad Secure
se configura como false
.
He evitado este problema al agregar esto a mi archivo Global.asax
:
void Session_Start(object sender, EventArgs e)
{
if (Request.IsSecureConnection) Response.Cookies["ASP.NET_SessionID"].Secure = false;
}
Esto significa que si la cookie de sesión se crea a través de HTTP, solo será accesible a través de HTTPS.
Si alguna de las soluciones anteriores no funciona, intente esto. He descifrado esto después de investigar un par de días.
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
...
...
CookieSecure = CookieSecureOption.Never
});