Foros del Web » Programando para Internet » ASPX (.net) »

Ayuda actualizar bd al cerrar ventana

Estas en el tema de Ayuda actualizar bd al cerrar ventana en el foro de ASPX (.net) en Foros del Web. Ante todos Buenas Noches, tengo un problema el cual eh estado investigando y hasta ahora no doy con la respuesta, es por ello que acudo ...
  #1 (permalink)  
Antiguo 23/06/2010, 19:04
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 14 años, 4 meses
Puntos: 267
Busqueda Ayuda actualizar bd al cerrar ventana

Ante todos Buenas Noches, tengo un problema el cual eh estado investigando y hasta ahora no doy con la respuesta, es por ello que acudo a ustedes. Estoy trabajando con una tabla usuario que tiene un campo llamado estado el cual puede ser "CONECTADO" o "DESCONECTADO" y resulta que cuando un usuario se loguea se actualiza en la base de datos(sql server 2008) actualizando su estado a "CONECTADO", ahora mi problema es como hago para actualizar este estado a "DESCONECTADO" cuando un usuario cierre de forma forzada presionando [X] de la ventana ó Alt + f4. Desde ya espero de antemano su ayuda.
  #2 (permalink)  
Antiguo 24/06/2010, 09:55
Avatar de jaullo  
Fecha de Ingreso: abril-2009
Mensajes: 994
Antigüedad: 15 años, 6 meses
Puntos: 30
Respuesta: Ayuda actualizar bd al cerrar ventana

Prueba esto:
http://aspalliance.com/1294_CodeSnip...ServerSide.all
  #3 (permalink)  
Antiguo 24/06/2010, 12:31
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 14 años, 4 meses
Puntos: 267
Respuesta: Ayuda actualizar bd al cerrar ventana

Gracias jaullo por tu atencion y disculpa la demora en contestar... le hechare un ojo y te respondo
  #4 (permalink)  
Antiguo 24/06/2010, 12:52
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 14 años, 4 meses
Puntos: 267
Respuesta: Ayuda actualizar bd al cerrar ventana

lo eh probado pero no me funciona, cuando el cliente hace clic en un link este llama nuevamente al servidor y mata la session, lo cual no debe suceder, nuevamente t doy gracias jaullo por tu atencion. Alguien mas que me pueda brindar sus aportes? Le estare muy agradecido.
  #5 (permalink)  
Antiguo 24/06/2010, 21:15
Avatar de jaullo  
Fecha de Ingreso: abril-2009
Mensajes: 994
Antigüedad: 15 años, 6 meses
Puntos: 30
Respuesta: Ayuda actualizar bd al cerrar ventana

Ok, voy a tratar de dara una explicación un poco mas acertada:

Tienes el evento onUnload de la pagina.
El problema con este evento es que no se puede cancelar la descarga de la página. El evento, se dice él mismo onUnload, lo que significa que la página ya está descargada.

En Internet Explorer, tienes el caso del evento onbeforeunload de la pagina. Esta es una una buena idea para comprobar la descarga de una web. Por supuesto debes comprobar en google este evento para firefox.

Hay algo que debes tener en cuenta! Nunca se puede coger el evento de cierre del navegador al 100%.

Por ejemplo, si el usuario mata el proceso del explorador. Entonces el onUnload, o incluso la onbeforeunload no se llaman.

Sin embargo, aquí hay algunos metodos Javascript para comprobar si el usuario hace clic en la X en la parte superior derecha del navegador:

Código Javascript:
Ver original
  1. function handleWindowClose()
  2. {
  3.   if((window.event.clientX<0) || (window.event.clientY<0))
  4.     {
  5.       event.returnValue = "Si ha echo cambios en los campos sin salvarlos, por favor presiones guardar o sus cambios se perderán.";
  6.     }
  7. }

Por ejemplo, puedes ejecutar este script cada vez que se hace clic en un botón del ratón (bueno, tal vez eso es algo de sobrecarga.) Pero, de nuevo, ¿qué pasa si un usuario cierra su navegador con la combinación de teclas ALT + F4?

Esta es la solución para el ALT+F4,
Código Javascript:
Ver original
  1. if (event.altKey==true && event.keyCode==0 )
  2.  
  3. {  alert("ALT + F4 ha sido presionado"); }

Pero recuerda, esto no te asegura la captura del evento al 100% (El usuario puede utilizar el TaskManager, o cerrar desde otro boton,etc)


Tambien, este es un ejemplo de como llamar un metodo desde el server-side cuando una ventana es cerrada.
Este ejemplo implica la creación de una página aparte (en este ejemplo, LogoffPage.aspx) que albergara la función (la página no se mostrará), pero las multiples llamadas a la funcion puede ser realizadas allí y se puede acceder a través del Query String. Esto es básicamente lo mismo que crear un servicio Web, lo que sería una mejor solución, pero es más difícil puesto aquí.

//////////////////////////////////////////////////////////////////////////
// Page1.aspx
//////////////////////////////////////////////////////////////////////////

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2. <!--
  3. function callAjax(webUrl, queryString)
  4. {
  5.  var xmlHttpObject = null;
  6.  
  7.  try
  8.  {
  9.   // Firefox, Opera 8.0+, Safari...
  10.  
  11.   xmlHttpObject = new XMLHttpRequest();
  12.  }
  13.  catch(ex)
  14.  {
  15.   // Internet Explorer...
  16.  
  17.   try
  18.   {
  19.    xmlHttpObject = new ActiveXObject('Msxml2.XMLHTTP');
  20.   }
  21.   catch(ex)
  22.   {
  23.    xmlHttpObject = new ActiveXObject('Microsoft.XMLHTTP');
  24.   }
  25.  }
  26.  
  27.  if ( xmlHttpObject == null )
  28.  {
  29.   window.alert('AJAX no está disponible en este explorador web');
  30.   return;
  31.  }
  32.  
  33.  xmlHttpObject.open("GET", webUrl + queryString, false);
  34.  xmlHttpObject.send();
  35.  
  36.  return xmlText;
  37. }
  38. // -->
  39. </script>
  40.  
  41. <script type="text/javascript">
  42. <!--
  43. var g_isPostBack = false;
  44.  
  45. window.onbeforeunload = function ()
  46. {
  47.  if ( g_isPostBack == true )
  48.   return;
  49.  
  50.  var closeMessage =
  51.   'Esta saliendo de esta página.\n' +
  52.   'Si ha realizado cambios y no ha guardado, sus cambios se perderán.\n' +
  53.   'Está seguro que desea salir?';
  54.  
  55.  if ( window.event )
  56.  {
  57.   // IE only...
  58.  
  59.   window.event.returnValue = closeMessage;
  60.  }
  61.  else
  62.  {
  63.   // Other browsers...
  64.  
  65.   return closeMessage;
  66.  }
  67.  
  68.  g_isPostBack = false;
  69. }
  70. window.onunload = function ()
  71. {
  72.  if ( g_isPostBack == true )
  73.   return;
  74.  
  75.  var webUrl = 'LogoffPage.aspx';
  76.  var queryString = '?LogoffDatabase=Y&UserID=' + '<%= Session["UserID"] %>';
  77.  var returnCode = callAjax(webUrl, queryString);
  78.  //alert(returnCode);
  79. }
  80. // -->
  81. </script>


//////////////////////////////////////////////////////////////////////////
// Page1.aspx.cs
//////////////////////////////////////////////////////////////////////////

Código ASP:
Ver original
  1. Private Sub Page_Load(sender As Object, e As System.EventArgs)
  2.     If Me.IsPostBack Then
  3.         Me.Session("UserID") = "12345"
  4.     End If
  5.  
  6.     Me.RegisterOnSubmitStatement("OnSubmitScript", "g_isPostBack = true;")
  7. End Sub


//////////////////////////////////////////////////////////////////////////
// LogoffPage.aspx.cs
//////////////////////////////////////////////////////////////////////////

Código ASP:
Ver original
  1. Protected Function LogoffUser(userId As String) As String
  2.     Dim returnValue As String = "OK"
  3.  
  4.     ' Llamar a la base de datos, registrar el usuario fuera de aqui
  5.  
  6.     Return returnValue
  7. End Function
  8.  
  9. Private Sub Page_Load(sender As Object, e As System.EventArgs)
  10.     Dim logoffDatabase As String = If((Me.Request("LogoffDatabase") Is Nothing), String.Empty, Me.Request("LogoffDatabase"))
  11.     Dim returnValue As String = String.Empty
  12.  
  13.     If logoffDatabase = "Y" Then
  14.         If returnValue.Length > 0 Then
  15.             returnValue += ", "
  16.         End If
  17.  
  18.         returnValue += Me.LogoffUser(Me.Session("UserID").ToString())
  19.     End If
  20.  
  21.     Me.Response.ClearHeaders()
  22.     Me.Response.Clear()
  23.     Me.Response.Write(returnValue)
  24.     Me.Response.[End]()
  25. End Sub

Espero esto te aclare un poco mas el panorama.

Saludos,
  #6 (permalink)  
Antiguo 25/06/2010, 09:22
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 14 años, 4 meses
Puntos: 267
Respuesta: Ayuda actualizar bd al cerrar ventana

Gracias Jaullo, sin duda tu comentario me aclaro mas el panorama, talvez sea porque soy nuevo en el mundo de la programacion y logicamente porque recien me estoy iniciando, voy a implementar mi logoff de la manera de la cual me indicas, lo pruebo y te estoy respondiendo, cabe aclarar que te agradesco infinitamente tu tiempo dedicado compañero.
  #7 (permalink)  
Antiguo 25/06/2010, 10:20
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 14 años, 4 meses
Puntos: 267
Respuesta: Ayuda actualizar bd al cerrar ventana

tengo un problema jaullo, no me reconoce este codigo en el load del page1

RegisterOnSubmitStatement("OnSubmitScript", "g_isPostBack = true;")
  #8 (permalink)  
Antiguo 30/06/2010, 15:34
Avatar de jaullo  
Fecha de Ingreso: abril-2009
Mensajes: 994
Antigüedad: 15 años, 6 meses
Puntos: 30
Respuesta: Ayuda actualizar bd al cerrar ventana

Me parece extraño, pues lo he revisado y funciona bien
__________________
http://geekswithblogs.net/jaullo/Default.aspx
Si te he ayudado regalame Karma positivo!!!

Etiquetas: cerrar, sesiones, aspx, ventanas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:02.