2010-10-21 21 views

Respuesta

10

He buscado una solución consistente a este problema hace algún tiempo, y mi decisión fue manejar la situación sin creer en el navegador o el usuario.

No puede estar seguro de si un usuario está dejando su página y cuándo, e incluso si usa 'onunload', es posible que no obtenga el evento antes de que el navegador se cierre o salga de la página. Y los bloqueos del navegador no le darán ningún tipo de señal, por lo que creer que usted sabe que el usuario aún está viendo su página y que puede tomar otras medidas es defectuoso.

Lo mejor que puede hacer para cerrar la sesión de un usuario es poner un tiempo de espera de sesión adecuado, y si necesita más control, puede intentar agregar llamadas AJAX en páginas críticas con señales de 'Estoy vivo' y luego cerrar la sesión usuarios que ya no responden (que requerirían un navegador compatible con AJAX/JS y pueden excluir usuarios potenciales).

+2

+1 - no confíe en los navegadores. – Nivas

+1

estoy de acuerdo con su solución, pero quiero agregar este manejo para cerrar sesión automáticamente cuando el usuario cierre el navegador antes de cerrar la sesión. en mi aplicación si el usuario cierra directamente el navegador sin cerrar la sesión, entonces el usuario no puede iniciar sesión antes de los 20 minutos. – DJJ

+1

Tenga en cuenta que no importa lo que ocurra, no importa cuán inteligente, NUNCA se asegure una señal de desconexión, como expliqué anteriormente. Puede enviar un comando de cierre de sesión usando 'onunload', pero tendrá que manejarlo correctamente para no agotar mucho a un usuario que está navegando a otra página de su sistema, además de que no funcionará todo el tiempo. Mi honesta opinión es que no vale la pena el esfuerzo. Solo vive con las sesiones perdidas asesinadas por el tiempo de espera. – mdrg

5

Usted está buscando el onunload:

window.onunload = function() { 
    // check the window is closed (see point 1 below) 
    // do log out 
} 

Hay 2 problemas con esto:

  1. Se llama cuando el usuario se desplaza fuera de la página, refresca, o generalmente se descarga así como cuando la ventana del navegador está cerrada.
  2. No parece haber un comportamiento constante entre los navegadores.

Recomiendo utilizar un enfoque diferente.

3

Tienes que ir con el tiempo de espera de la sesión. Como ha etiquetado su pregunta JSP, creo que es una aplicación web java de la que está hablando.

Generalmente tiene un oyente de tiempo de espera de sesión y tiene el código de "cierre de sesión" en el oyente.

En general, no confíe en los eventos del lado del cliente: un bloqueo del navegador/sistema, el cierre sin cerrar el navegador, etc. no activará los eventos.

+0

pls se puede especificar en detalle o puede enviarme un ejemplo – DJJ

Cuestiones relacionadas