asp.net - net - eliminar cookies c#
Session_End no se dispara? (5)
Quiero cerrar la sesión de un usuario cuando su sesión expira. Entonces usé el siguiente código en Global.asax:
protected void Session_End(object sender, EventArgs e)
{
FormsAuthentication.SignOut();
}
Pero parece que session_end
nunca se dispara. Alguna idea de como puede arreglarlo? Estoy usando ASP.NET con la configuración predeterminada.
¿Estás seguro de que nunca dispara?
Según tengo entendido, Session_End
no tiene nada que ver con la solicitud actual porque la sesión de ASP.NET se termina por el tiempo de espera DESPUÉS de que ha llegado la última solicitud del cliente. La llamada a FormsAuthenticaion.SignOut
manipula las cookies de autenticación y, por lo tanto, no tiene ningún efecto sin ninguna conectividad del cliente (navegador).
Eche un vistazo a esta pregunta (que tiene una respuesta): el problema es más o menos similar al suyo, por lo que puede encontrar una solución adecuada:
Session_End en Global.asax.cs no se activa con la autenticación de formularios
Espero que esto ayude.
En su web.config necesita tener el elemento sessionState como elemento secundario del elemento
<configuration>
<system.web>
<sessionState mode="InProc" />
.....
</system.web>
</configuration>
No sé cómo funciona, pero se disparará cuando cierre mi navegador después del tiempo de espera.
public void Session_End(Object sender, SessionEndedEventArgs e)
{
}
Llamar esto desde
Application_Start() Event
SessionEndModule.SessionEnd += new SessionEndEventHandler(Session_End);
No sé, es característica o error. O puede ser que no entiendo suficiente gestión de sesiones en ASP.NET. Pero esto es lo que encontré.
Session_End no se activa en ASP.NET MVC 4 (con la configuración predeterminada para el elemento sessionState en web.config) si Session_Start no se declara.
Por lo tanto, necesita declarar Session_Start para capturar Session_End :)
protected void Session_Start(Object sender, EventArgs e) { }
protected void Session_End(Object sender, EventArgs e) {
Debug.WriteLine("End. " + Session.SessionID);
}
Puede establecer algunos datos de sesión en Session_Start. Sin esto, Session_End no se disparará. ver this
También otra cosa muy importante a tener en cuenta aquí es que si no guarda nada en la sesión, el evento Session_End no se activará. Debe haber algo guardado en la sesión al menos una vez para que se active el evento Session_End. Esto también significa que si guarda algo en la sesión en la primera solicitud y abandona la sesión en la misma solicitud, el evento Sesison_End no se activará, ya que no se guardó nada en la sesión.