Foros del Web » Programando para Internet » ASP Clásico »

detectar cierre del navegador

Estas en el tema de detectar cierre del navegador en el foro de ASP Clásico en Foros del Web. Hola La cuestión es compis la siguiente: En una aplicación web se generan una serie de archivos de trabajo..... Lo que necesito es detectar cuando ...
  #1 (permalink)  
Antiguo 19/08/2008, 18:20
overon37
Invitado
 
Mensajes: n/a
Puntos:
detectar cierre del navegador

Hola

La cuestión es compis la siguiente:

En una aplicación web se generan una serie de archivos de trabajo.....
Lo que necesito es detectar cuando el usuario ha cerrado el explorador, es decir, adios a su sesión, y eliminar los archivos de trabajo que se han generado para ese usuario.

El evento "unload" de la página me está dando error cuando intento eliminar los archivos, es mas da error nada mas abrir el navegador¡¡¡¡

La solución que le he dado hasta el momento, como los archivos se generan por la ip del usuario(los archivos tienen como nombre la ip+hora), y esta es fija para cada uno (intranet) al inicio de la session borro lo que tuviese de otras sesiones anteriores, pero claro, esto deja "basura" hasta que vuelva a entrar y al irse la basura vuelve a estar presente....

Se os ocurre alguna solución

Gracias
  #2 (permalink)  
Antiguo 19/08/2008, 18:54
Avatar de JuanRAPerez
Colaborador
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.393
Antigüedad: 20 años, 7 meses
Puntos: 27
Respuesta: detectar cierre del navegador

hola overon37

pues me parece que deverias de postear el código que te da error que ejecutas en el evento unload

podría la gente de el foro tratar de ayudarte a solucionarlo si es asp o

suerte
__________________
JuanRa Pérez
San Salvador, El Salvador
  #3 (permalink)  
Antiguo 19/08/2008, 19:56
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Respuesta: detectar cierre del navegador

Hola. Me parece que la mejor opción es la que actualmente usás.
Aunque, tratándose de un ambiente controlado ocmo una intranet, también podés eliminar esos archivos de trabajo (con el mismo método)mediante un enlace o botón de cierre de session. Complementado ésto con lo anterior vas a minimizar la acumulación de "basura".

Claro que igualmente debés concientizar a lo usuarios de utilizar el cierre de sesión y no cerrar la ventana del navegador.

Suerte con ésto último
__________________
...___...
  #4 (permalink)  
Antiguo 20/08/2008, 03:58
overon37
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: detectar cierre del navegador

Aquí os pongo el código, este código SI funciona perfectamente cuando se ejcuta al inicio de la aplicación web, que es cuando estoy limpiando esos archivos "basura".

'eliminamos los archivos generados durante la ejecución de la aplicación web
Dim ficheros() As String
ficheros = Directory.GetFiles(MapPath("~/basura"))
For i As Int16 = 0 To ficheros.Length - 1
' eliminamos los ficheros de nuestra ip
If ficheros(i).Contains(Session("ip")) Then
File.Delete(ficheros(i))
End If
Next

pero cuando este código se ejecuta en el evento "unload", da error, nada mas cargar la página, si bien el evento solo debería dispararse cuando se produce la "descarga" de la página.

un saludo y gracias
  #5 (permalink)  
Antiguo 20/08/2008, 11:27
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Respuesta: detectar cierre del navegador

Y cómo llamás a ese procedimiento ASP desde un onunload?
__________________
...___...
  #6 (permalink)  
Antiguo 20/08/2008, 11:28
Avatar de JuanRAPerez
Colaborador
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.393
Antigüedad: 20 años, 7 meses
Puntos: 27
Respuesta: detectar cierre del navegador

y el error es?
__________________
JuanRa Pérez
San Salvador, El Salvador
  #7 (permalink)  
Antiguo 20/08/2008, 16:00
overon37
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: detectar cierre del navegador

Protected Sub Page_Unload(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Unload
'eliminamos los archivos generados durante la ejecución de la aplicación web
Dim ficheros() As String
ficheros = Directory.GetFiles(MapPath("~/basura"))
For i As Int16 = 0 To ficheros.Length - 1
' eliminamos los ficheros de nuestra ip
If ficheros(i).Contains(Session("ip")) Then
File.Delete(ficheros(i))
End If
Next
End Sub

Como se ve el código se ejecuta en el evento "unload" de la página.

El error que da es el siguiente

Error de servidor en la aplicación '/fotos'.
Referencia a objeto no establecida como instancia de un objeto.
Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.

Detalles de la excepción: System.NullReferenceException: Referencia a objeto no establecida como instancia de un objeto.

Error de código fuente:

Línea 199: 'eliminamos los archivos generados durante la ejecución de la aplicación web
Línea 200: Dim ficheros() As String
Línea 201: ficheros = Directory.GetFiles(MapPath("~/basura"))
Línea 202: For i As Int16 = 0 To ficheros.Length - 1
Línea 203: ' eliminamos los ficheros de nuestra ip

El error lo da en la línea 201.

Recalcar que el mismo código ejecutado no en ese evento si por ejemplo al pulsar un botón, asociado a la pulsación de un botón, no da error.

Ese error salta en cuanto se abre la página, no en el evento unload,

Última edición por overon37; 20/08/2008 a las 16:32
  #8 (permalink)  
Antiguo 20/08/2008, 16:02
overon37
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: detectar cierre del navegador

se podría hacer en el evento unload en la etiqueta body, ejecutar un script, y ese script borrar ficheros, pero claro, javascript no permite modificar el sistema de ficheros, como es el borrarlos.
pero asociado a ese evento si se controla, cada vez que se descarga la página se dispara el evento de ese modo correctamente

<script>
function ver() {
alert ("descarga de la página");
}

<body onunload="ver()">

esto funciona, la descarga de la web no solo se produce cuando cerramos sino evidentemente cada vez que se produce el postback. lo cual está bien. pero claro mediante javacript no se pueden borrar ficheros..

No se si la solución estará controlando las variables de sesión de usuario, aunque su tiempo es de 20 minutos (vida de la variable de sesión, que se puede modificar), a las 20 minutos como mucho el servidor detectaría que el usuario ha salido y efectuaría el borrado de su "basura".

de ser así, ¿cómo se implementaría?, como se que la variable de sesión de un usuario ha caducado???? y de ese modo actuar,

gracias

Última edición por overon37; 20/08/2008 a las 16:37
  #9 (permalink)  
Antiguo 20/08/2008, 16:17
overon37
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: detectar cierre del navegador

a ver, la cuestión es que el evento "unload" no se dispará cuando cerramos el navegador, sino cuando la página se descarga del servidor donde está alojada la aplicación, y evidentemente ambas cosas no son simultaneas.

por eso es mi pregunta, de que manera se puede implementar que la aplicación detecte que un usuario ha cerrado su navegador, o a abandona la sesión (que es lo mismo) y poder entoncer eliminar todos esos ficheros que se han generado para ese usuario.

ya que eliminarlos cuando inicia la sesión, no está mal, pero claro para que dejar en el servidor toda esa basura hasta que el usuario vuelva a entrar????

En la aplicación (corriendo en intranet) van a entrar unas 1300 personas, no hay problemas de espacio en el servidor, pero no es "bonito" dejar todo es pululando hasta que vuelva a entrar el usuario.

gracias
  #10 (permalink)  
Antiguo 20/08/2008, 20:19
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Respuesta: detectar cierre del navegador

Evidentemente estás programando en ASP.Net.
Igualmente, te remito a mi primer intervención en éste mensaje. Al menos a mi me parece la solución más sana.

Un saludo.
__________________
...___...
  #11 (permalink)  
Antiguo 21/08/2008, 15:53
overon37
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: detectar cierre del navegador

Cita:
Iniciado por Al Zuwaga Ver Mensaje
Evidentemente estás programando en ASP.Net.
Igualmente, te remito a mi primer intervención en éste mensaje. Al menos a mi me parece la solución más sana.

Un saludo.
hola
no te entiendo, quieres decir ¿qué por qué ejecuto el código desde el evento "unload"?

Esta claro que no es la manera, pero ¿cuál es la manera? no se puede arreglar la cosa simplemente poniendo un botón y que usuario cuando termine lo pulse, todos sabemos que la mayoría de usuarios no lo harían..... ni yo lo hago muchas veces en la web de mi banco..... pero mas que nada por inercia de cerrar el navegador que es mas sencillo

hay una manera de preguntar si la variable de sesión ha caduca o no

If Session.IsNewSession Then
' ha caducado la sesion
eliminar_ficheros()
End If

pero claro, ha de ejecutarlo el servidor por cada variable de sesión de cada usuario, y esa es otra cuestión, ¿cómo?


se os ocurre alguna solución o lo dejo como está, que cuando el usuario entre elimine todo lo de la sesión anterior, aunque creo que debe existir otra forma...

un saludo
  #12 (permalink)  
Antiguo 21/08/2008, 17:23
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Respuesta: detectar cierre del navegador

He leido solo de reojo el hilo del post, no estoy seguro si ya vieron la opción del global.asa (o asax si es .net), pero si quieres detectar el cierre del navegador claro que solo se puede hacer con programación cliente (creo que eso ya lo habíamos tocado antes pero no encontré el post exacto).

Aquí hay una forma de alguien que dice pudo hacerlo, no lo he probado pero igual no descubrió el hilo negro seguro haciendo pruebas se puede mejorar.

Saludos
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 23:29.