Evento al Cerrar Navegador

08/09/2009 - 00:07 por Giovany | Informe spam
Buen dia Grupo,

Tengo una aplicacion web en c# con framework 3, en el menu principal tengo
un boton de salir, donde se efectuan el FormsAuthentication.SignOut(),
Session.RemoveAll(), Session.Abandon() y ejecuto también un proc de base de
datos que limpia la info que tenia la session del usuario en unas tablas
temporales

Mi consulta es, si el usuario cierre el navegador y no da al boton salir de
mi app, como pueda captar el evento que se cerro el navegador y hacer los
procesos de salir o cierre que se hacen en el boton.

saludos y gracias.
 

Leer las respuestas

#1 Alberto Poblacion
08/09/2009 - 08:10 | Informe spam
"Giovany" wrote in message
news:
Tengo una aplicacion web en c# con framework 3, en el menu principal tengo
un boton de salir, donde se efectuan el FormsAuthentication.SignOut(),
Session.RemoveAll(), Session.Abandon() y ejecuto también un proc de base
de
datos que limpia la info que tenia la session del usuario en unas tablas
temporales

Mi consulta es, si el usuario cierre el navegador y no da al boton salir
de
mi app, como pueda captar el evento que se cerro el navegador y hacer los
procesos de salir o cierre que se hacen en el boton.



En resumidas cuentas: no se puede. El navegador no transmite nada al
servidor cuando lo cierran, por lo que el servidor "no se entera".

Se han propuesto diversas "chapuzas" para tratar de detectar mediante
diversos trucos en javascript el cierre del navegador. Ninguno de estos
métodos funciona bien.

Lo mejor que puedes hacer es tener un "timeout", de forma que el
servidor considere que el usuario está desconectado cuando transcurre un
cierto periodo de inactividad. Para el Session ya existe un tiemout (20
minutos por defecto), con lo que no tienes que hacer nada; la sesión ya
expira automáticamente.
El FormsAuthentication usa una cookie, que si la tienes configurada como
volátil se borra automáticamente al cerrar el navegador, por lo que tampoco
tienes que programar nada para hacer el SignOut.
Lo único malo es el procedimiento almacenado que limpia los datos de las
tablas temporales. Para esto, te sugeriría que lleves en una de las tablas
un campo que indique la fecha del último acceso, y que uses el Agente de Sql
Server para ejecutar periódicamente un procedimiento que borre de las tablas
los registros que sean demasiado antiguos. Aunque esto sí que te llevará
algo de trabajo, en cualquier caso tendrías que hacerlo de todas formas,
porque incluso aunque el navegador siempre pasase por la pantalla de
desconexión, se puede quedar colgado el servidor web, o se puede caer la
red, o pueden ocurrir multitud de circunstancias en las que no se haga la
"limpieza", por lo que este mecanismo de borrado de temporales tendrías que
tenerlo previsto.

Preguntas similares