Pregunta

Me pregunto si puedo manejar un evento de tiempo de espera de sesión. Necesito hacer una llamada de función a mi función justo antes de que se agote el tiempo de espera de la sesión o el usuario abandone mi página o cierre la ventana del navegador. La parte más importante aquí es tener acceso a todo lo almacenado durante la sesión, las variables de sesión.

¿Fue útil?

Solución

Eche un vistazo al método Session_End () en global.asax. El archivo global.asax ya debería estar conectado para llamar a este método cuando finalice la sesión. Puedes poner tu código allí como quieras.

    Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
        ' Fires when the session ends
    End Sub

Por supuesto, debe tener en cuenta que la sesión es completamente una cosa del lado del servidor. Solo terminará después de X minutos de inactividad (20 minutos es el valor predeterminado). No terminará en el instante en que el usuario cierre la ventana. ASP.NET no tiene conocimiento de que un usuario cierre una ventana o abandone su página.

Y, de hecho, es complicado intentar realizar cualquier acción inmediata en el lado del servidor cuando esto sucede. Quiero decir, es fácil llamar a window.onbeforeunload en Javascript y abrir un cuadro de confirmación antes de que el usuario cierre la ventana. Pero cuando intentas enviar un paquete al servidor inmediatamente antes de que la ventana se cierre, creo que te resultará una tarea difícil hacer que todo sea fácil de usar. Puede escribir algunos Javascript que envíen un mensaje al servidor utilizando AJAX, que notifica al servidor que el usuario está cerrando su navegador, y luego usar más Javascript para cerrar el navegador después de que se haya enviado ese mensaje. Pero luego el usuario recibirá el molesto mensaje (en la mayoría de los navegadores) que indica que un script está intentando cerrar la ventana. Esto parecerá muy aficionado al usuario y puede hacer que piensen dos veces antes de volver.

Entonces, si estás dispuesto a aguantar un retraso, simplemente evitaría todo este desastre de Javascript por completo y confiaría en una solución pura del lado del servidor usando Session_End (). Después de todo, si un usuario cierra la ventana o se va, ASP.NET eventualmente lo notará porque la sesión expirará.

Otros consejos

Session_end manejará el problema del tiempo de espera de la sesión. Sin embargo, esto no se activará cuando el usuario cierre el navegador o se mueva a una URL diferente. Espera hasta que caduque el tiempo de espera de la sesión.

Para detectar las otras condiciones, deberá usar JavaScript en el cliente. Sin embargo, estos métodos no siempre son confiables dependiendo del navegador / versión, etc. Además, si la computadora del usuario se apaga, se desconecta o desaparece por completo, este script no se activará.

Puede considerar otras alternativas. ¿Qué estás tratando de lograr exactamente con esta función?

La web no tiene estado, por lo que no sabrá si el usuario ha cerrado la ventana del navegador. Puede usar el evento 'Session_End' en el archivo global.asax para tiempos de espera de sesión. Si desea acceder a todas las sesiones, puede almacenarlas en una colección a través del evento 'Session_Start', también en el archivo global ...

Editar: si desea interceptar el evento de cierre de una página usando JavaScript, así es como (tenga en cuenta que esto no es confiable):

window.onbeforeunload = closeIt;

function closeIt(){ 


  return "You have unsaved changes. Are you sure you want to leave this page?";

}

Podría tener una página base que es heredada por cada página aspx & amp; en el evento init de su página base, simplemente verifique si hay una variable de sesión para nada. Si no es nada, significa que la sesión ha expirado y puede redirigir al usuario a una página de inicio de sesión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top