Controlar cuando el usuario nos cierra el navegador ¿Es posible?

Pues sí, es posible, empleando un pequeño truquillo en la maquetación en nuestro Site.

En el cliente en el que me encuentro actualmente me lo pidieron como requisito indispensable, puesto que intentan asemejar el comportamiento de sus aplicaciones Winform y ademas así liberar todos los objetos asociados a esa sesión. Otro requerimiento es que un usuario sólo pueda abrir un ventana de IExplorer para cada aplicación, pero esto lo veremos en la siguiente entrega.

Como comenté en el primer párrafo todo se basa en el modélo de maquetación del site. Es necesario tener una página que nunca se descargue y que solo se dispare su evento JavaScript OnUnload bien cuando nos cierre el navegador de la dichosa X o cuando pulse nuestro botón de desconexión, por lo tanto vamos a utilizar una página principal que sea contenedora de otras páginas mediante un IFRAME:

   1:  <div id="content">
   2:      <iframe id="contenido" src="contenido1.aspx" 
           frameBorder="0" width="100%" height="400"></iframe>
   3:  </div>

 

En el IFRAME se realizará la navegación de nuestro Site y así podremos controlar cuando nos cierra el navegador ¿Pero como? pues sencillo, lo controlaremos con un campo oculto:

   1:  <input id="logout" type="hidden" value="0">

 

al que asignaremos un valor distinto de 0 desde nuestro botón de desconexión desde el Code-Behind:

1: private void imgBtnSalir_Click(object sender,

System.Web.UI.ImageClickEventArgs e)

   2:  {
   3:      FormsAuthentication.SignOut();
   4:      Session.Abandon();

5: Page.RegisterStartupScript("logout",

"<script>document.getElementById(\"logout\").value=1;</script>");

   6:      Page.RegisterStartupScript("close",
"<script>window.close();</script>");
   7:  }

 

Y en el evento JavaScript OnUnload comprobamos ese valor con la función Logout (<body OnUnload="Logout();">):

   1:  function Logout()
   2:  {
   3:      var logout = document.getElementById("logout");
   4:   
   5:     if (logout.value == 0)
   6:      {
   7:          OpenCenterPopUp("logout.aspx", "", 600, 70);
   8:      }
   9:  }

 

Si es 0, abrimos la ventana logout.aspx que se encarga de liberar los recursos de la sesión y de hacer un logout de la autenticación (Aunque yo esto no lo hago en mi cliente puesto que es una intranet y utilizo la autenticación de Windows integrada pero para el ejemplo he preferido añadirlo):

   1:  private void Page_Load(object sender, 
System.EventArgs e)
   2:  {
   3:      FormsAuthentication.SignOut();
   4:      Session.Abandon();

5: this.RegisterStartupScript("close",

"<script>setTimeout(\"window.close();\",10000);</script>");

   6:  }

 

Y para finalizar que mejor que verlo en acción (Usuario: admin Password: admin):

Bueno pues espero haberme explicado bien y como dije antes en el próximo capítulo veremos como controlar que el usuario sólo pueda abrir un explorador por aplicación.

Salu2

Published 27/2/2007 12:14 por Luis Ruiz Pavón
Archivado en:
Comparte este post:
http://geeks.ms/blogs/lruiz/archive/2007/02/27/controlar-cuando-el-usuario-nos-cierra-el-navegador-es-posible.aspx

Comentarios

# re: Controlar cuando el usuario nos cierra el navegador ¿Es posible?

esto es solo para IE, correcto?

lo probe con Firefox 2.0.2 y no funciona, con IE7 funciona bien... creo, me da otra ventanita cuando cierro el browser

salu2

Tuesday, February 27, 2007 5:53 PM por Eber Irigoyen

# re: Controlar cuando el usuario nos cierra el navegador ¿Es posible?

Hola Eber, sólo lo he probado en IE 6.0.2900.2180 porque es con lo que trabajan en el cliente.

Intentaré probarlo en FireFox e intentaré adecuarlo y lo posteré.

Gracias por tu aporte!!!

Salu2

Wednesday, February 28, 2007 8:47 AM por Luis Ruiz Pavón

# re: Controlar cuando el usuario nos cierra el navegador ¿Es posible?

Lo he probado con la versión 1.5.0.4 de FireFox y funciona perfectamente con la 2.0.2 no lo he probado todavía.

Salu2

Wednesday, March 14, 2007 3:18 PM por Luis Ruiz Pavón

# re: Controlar cuando el usuario nos cierra el navegador ¿Es posible?

No funciona con opera 9

Sunday, May 20, 2007 6:20 AM por Ernesto

# re: Controlar cuando el usuario nos cierra el navegador ¿Es posible?

La verdad es que no me he planteado todavía hacerlo estandar XD Si alguien se presta ;)

Salu2

Tuesday, May 29, 2007 2:44 PM por Luis Ruiz Pavón

# re: Controlar cuando el usuario nos cierra el navegador ¿Es posible?

Hola Luís,

He estado probando tu ejemplo y hay una cosa que no acabo de entender. El evento onunload dispara la funcion Logout() en cada post-back, independientemente de si le he dado al boton X de cerrar explorador. ¿Cómo se sabe si el usuario ha pulsado el botón de cerrar el explorador (no el de salir imgBtnSAlir? ¿Hay que poner a 1 el valor de logout en cada click de cada control de la página susceptible de lanzar un postback?

Gracias.

Wednesday, June 06, 2007 2:19 PM por Oscar Lauroba

# re: Controlar cuando el usuario nos cierra el navegador ¿Es posible?

Hola Oscar:

No no hace falta, porque la navegación la hago con un iFrame y por eso la principal nunca hace postback y entonces es facil saber cuando se pulsó la X o cuando el botón de logout que lo que hace es poner el valor de ese campo a 1.

Te subo el ejemplo que lo verás mejor ;)

Salu2

Tuesday, July 10, 2007 2:33 PM por Luis Ruiz Pavón

# re: Controlar cuando el usuario nos cierra el navegador ¿Es posible?

HOLA OYE MI PROBLEMAS ES EL SIGUIENTE YO QUIERO Q SOL OENTRE UN USUARIO A LA VEZ A MI APLICACION Y Q SI OTRO INTENTA ENTRAR NO LO DEJA Y QUE CUANDO MI PRIMER USUARIO DEJE DE USAR LA APLICACION EL OTOR USUARIO YA PUEDA ENTRAR, LO QUE NO SE ES COMO CONTROLARLO YA Q SI MI PRIMER USUARIO CIERRA LA APLICACION CON EL TACHE YA NO SE SI SALIO O NO. DONDE PUEDO OCNTROLARESTO EN EL GLOBAL.AXAC?

Wednesday, July 18, 2007 7:35 PM por CLAUDIA

# re: Controlar cuando el usuario nos cierra el navegador ¿Es posible?

Esta usando ASP.NET 2.0???

Si es así con el MemebreshipProvider puedes comprobar si el usuario está logado.

Salu2

Friday, July 27, 2007 10:27 AM por Luis Ruiz Pavón

# re: Controlar cuando el usuario nos cierra el navegador ¿Es posible?

pero por que todo lo hacen en csharp porque no en asp vb

Sunday, April 27, 2008 6:06 PM por jose

# re: Controlar cuando el usuario nos cierra el navegador ¿Es posible?

Estimados... una consulta ¿ y que pasa cuando necesitamos redireccionar la pagina y tenemos valores u objetos almacenados en la sesion, los cuales queremos leer desde la siguiente pagina?

Cada vez que pasemos a la siguiente estos moriran...

Monday, June 16, 2008 11:44 PM por Ricardo

# re: Controlar cuando el usuario nos cierra el navegador ¿Es posible?

Al hacer refresh sobre la pagina (f5) se activa el evento onunload,como puedo remediarlo????

Tuesday, July 08, 2008 9:03 PM por Rob

# re: Controlar cuando el usuario nos cierra el navegador ¿Es posible?

Hola Rob, ese es el comportamineto por defecto de la página por eso tuve que idear esta parafernalia.

Salu2

Thursday, July 10, 2008 7:37 AM por Luis Ruiz Pavón

# re: Controlar cuando el usuario nos cierra el navegador ¿Es posible?

pspspspspsps

Thursday, October 09, 2008 10:59 PM por ps

# re: Controlar cuando el usuario nos cierra el navegador ¿Es posible?

necesito lo mismo con java, por favor unas pistas

Wednesday, November 05, 2008 7:54 PM por Carlos

# re: Controlar cuando el usuario nos cierra el navegador ¿Es posible?

Bien he leido los comentarios pero este ejercicio se puede hacer si se utiliza martepage ya que no uso iframe, me podrian contestar a mi email jluisaries@gmail.com y tambien ponganlo en el foro verdad. :-)

Friday, February 25, 2011 10:57 PM por Puma ITCA-Santa Ana

# re: Controlar cuando el usuario nos cierra el navegador ¿Es posible?

Pero se podria hacer sin iframe? yo estoy usando una martepage si pueden me responden a mi correo jluisaries@gmail.com y en el foro tambien...

Friday, February 25, 2011 10:59 PM por Puma ITCA-Santa Ana