¿Cómo puedo verificar para asegurarme de que una ventana se esté utilizando activamente y, en caso contrario, alertar al usuario final de que está a punto de cerrar sesión?

StackOverflow https://stackoverflow.com/questions/105147

  •  01-07-2019
  •  | 
  •  

Pregunta

Estoy trabajando en un nuevo sistema back-end para mi empresa, y una de sus solicitudes es bloquear una ventana y enviar al usuario a la pantalla de inicio de sesión si la deja inactiva por mucho tiempo.

Supongo que haría esto con JavaScript adjuntando oyentes a los clics, movimientos del mouse y pulsaciones de teclas, pero me preocupa alterar otros scripts.

¿Alguna sugerencia?­­­­­­­­­­­­­­­­­­­­­­­­­­

¿Fue útil?

Solución

En primer lugar, para que esto sea efectivo, debe asegurarse de que los usuarios cierren sesión en el servidor al final de este tiempo de inactividad.De lo contrario, nada de lo que haga del lado del cliente será efectivo.Si los envía a una página de inicio de sesión, pueden simplemente hacer clic en el botón Atrás.

En segundo lugar, la forma convencional de hacerlo es utilizar una etiqueta de "metaactualización".Agregando esto a la página:

<meta http-equiv="refresh" content="900;url=http://example.com/login"/>

los enviará a la página de inicio de sesión después de 15 minutos (900 segundos).Esto los enviará allí incluso si están haciendo algo en la página.No detecta actividad.Simplemente sabe cuánto tiempo ha estado activa la página en el navegador.Esto suele ser bastante bueno porque las personas no tardan 15 minutos en completar una página (stackoverflow.com es una excepción notable, supongo).

Si realmente necesita detectar actividad en la página, creo que su primer instinto es correcto.Tendrás que agregar controladores de eventos a varias cosas.Si le preocupa alterar otros scripts para validación u otras cosas, debería considerar agregar controladores de eventos mediante programación en lugar de hacerlo en línea.Es decir, en lugar de utilizar

<input type="text" onClick="doSomething;">

Acceda al modelo de objetos directamente con

Mozilla way:   element.addEventListener('click' ...)
Microsoft way: element.attachEvent('onclick' ...) 

y luego asegúrese de transmitir los eventos después de recibirlos para que el código existente siga haciendo lo que se supone que debe hacer (¿validación?).

http://www.quirksmode.org/js/introevents.html tiene un artículo decente sobre cómo hacer esto.

--
bmb

Otros consejos

Podría simplemente hacer que cierre la sesión si el usuario no cambia de página después de tanto tiempo.Eso es lo que parece hacer el sistema Angel Learning Courseware.

Sin embargo, el otro problema al que te enfrentarás es que algunos usuarios desactivan JavaScript.

Si puedes poner código en la página, entonces hay dos cosas:

  • Javascript que busca el movimiento del mouse, la actividad del teclado y el desplazamiento.
  • Coloque una metaetiqueta de actualización en el html; si están en esa página durante más de X minutos, se redireccionará automáticamente a la página de inicio de sesión.

Si solo puedes poner código en el servidor:

  • Mantenga una sesión (cookie u otra) que rastree el tiempo entre cambios de página.Si se solicita una página durante más de X minutos desde la última solicitud, no entregue la página solicitada, entregue la página de inicio de sesión.

Puede utilizar las técnicas de metaactualización y de servidor juntas.La página actualizada mostrará "su sesión está a punto de caducar, haga clic aquí para regresar y continuar trabajando dentro de 30 segundos".

El botón en el que hacen clic restablece la sesión de su servidor y realiza una función de retroceso de página, por lo que todos los datos que tenían (en la mayoría de los navegadores) seguirán allí.Requiere javascript en la página de actualización, pero ninguno en la página original, solo una metaactualización.Sin embargo, el seguimiento de la actividad de JavaScript sería lo mejor.

-Adán

En el evento de carga de la página, puede usar setTimeout para activar una función que advierta al usuario que cerrará su sesión si no actualiza la página.

Con tiempos de espera de sesión de 5 minutos, podrías realizar advertencias después de 4 minutos:

setTimeout(timeoutWarning, 240000);

function timeoutWarning() {
  if(confirm('You have been idle for a while.  Would you like to remain logged in?'))
    window.location.refresh();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top