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.

Preguntas similare

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.
Respuesta Responder a este mensaje
#2 Giovany
08/09/2009 - 17:00 | Informe spam
Ok Alberto, gracias por tu ayuda.

Saludos

"Alberto Poblacion" wrote:

"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.


Respuesta Responder a este mensaje
#3 Claudio Quezada
09/09/2009 - 17:50 | Informe spam
Giovany escribió:
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.






Lo que hice alguna vez fue utilizar esta propiedad "onbeforeunload"
(http://www.w3schools.com/tags/html5...ibutes.asp) que en
firefox 2 e IE 6 me funcionaba bien.

En la pagina base tenia algo similar a esto

<body onbeforeunload="jsConfirmaSalida(Form1,event);">

y en un archivo javascript tenia la siguiente funcion

function jsConfirmaSalida(form,event)
{
var sBoton = form["txtEsBoton"];
var sTexto = form["txtAviso"].value;
var sClasificacion = form["txtClasificacion"].value;
var sAviso="";

switch(navigator.browserLanguage)
{
case "en":
case "en-us":
sAviso = "On having gone out it will lose the information that is
entering"; break;
case "es":
case "es-cl":
sAviso = "Al salir perdera la informacion del aviso que esta
ingresando"; break;
default:
sAviso = "Al salir perdera la informacion del aviso que esta
ingresando"; break;
}

if (sBoton.value==0 && (sClasificacion != "" || sTexto!=''))
{
document.getElementById("txtEsBoton").value = 0;
event.returnValue = sAviso;
}
}

en tu caso podrías hacer que en la funcion javascript se llame a una
pagina aspx que haga el cierre de sesion o que se yo...

espero que te sirva de orientacion o te ayude en algo.

saludos!
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida