ASP.NET: Session.SessionID cambia entre solicitudes
¿Por qué la propiedad SessionID en el objeto de sesión en una página ASP.NET cambia entre solicitudes?
Tengo una pagina como esta:
...
<div>
SessionID: <%= SessionID %>
</div>
...
Y la salida sigue cambiando cada vez que presiono F5, independientemente del navegador.
Esta es la razón
Cuando se utiliza el estado de sesión basado en cookies, ASP.NET no asigna almacenamiento para los datos de la sesión hasta que se utiliza el objeto Sesión. Como resultado, se genera una nueva ID de sesión para cada solicitud de página hasta que se accede al objeto de sesión. Si su aplicación requiere una ID de sesión estática para toda la sesión, puede implementar el método Session_Start en el archivo Global.asax de la aplicación y almacenar datos en el objeto Session para corregir la ID de la sesión, o puede usar código en otra parte de su aplicación para almacenar datos explícitamente en el objeto Sesión.
http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.sessionid.aspx
Básicamente, a menos que acceda a su objeto de sesión en el backend, se generará un nuevo ID de sesión con cada solicitud.
EDITAR
Este código debe agregarse en el archivo Global.asax. Agrega una entrada al objeto Sesión para que arregles la sesión hasta que caduque.
protected void Session_Start(Object sender, EventArgs e)
{
Session["init"] = 0;
}
Hay otra razón, más insidiosa, por la que esto puede ocurrir incluso cuando el objeto Sesión ha sido inicializado como lo demostró Cladudio.
En Web.config, si hay una <httpCookies>
entrada configurada requireSSL="true"
pero en realidad no estás usando HTTPS: para una solicitud específica, entonces la cookie de sesión no se envía (o tal vez no se devuelve, no estoy seguro de qué), lo que significa que termine con una nueva sesión para cada solicitud.
Encontré este de la manera más difícil, pasando varias horas yendo y viniendo entre varias confirmaciones en mi control de fuente, hasta que encontré qué cambio específico había roto mi aplicación.