2008-09-22 12 views
11

Actualmente estoy construyendo una aplicación web interna utilizada en una ubicación de fábrica/almacén. Los usuarios compartirán una sola PC entre varias personas, por lo que necesitamos tener un tiempo de espera de sesión bastante corto para evitar que las personas vaguen y dejen la aplicación conectada donde alguien más puede acceder a la PC y hacer algo con el nombre de usuario anterior.¿La mejor manera de lidiar con el tiempo de espera de la sesión en aplicaciones web?

El problema con esto es que una sesión puede agotar el tiempo de espera mientras un usuario está ingresando información en un formulario, especialmente si toman mucho tiempo.

¿Cómo manejarías esto de una manera fácil de usar?

Respuesta

3

Mantenga informado al servidor sobre el hecho de que el usuario está ingresando información activamente. Por ejemplo, envíe un mensaje al servidor si el usuario presiona la tecla TAB o hace clic con un mouse en un campo. La solución final depende de usted.

+0

Creo que esto funcionaría mejor para mi caso. Es menos intrusivo que abrir un cuadro de diálogo y mostrar un mensaje que el usuario probablemente no comprenda. Y no mantendrá la sesión viva indefinidamente al sondear constantemente el servidor. – anon

2

El mejor consejo sería solicitar a los usuarios que cierren la ventana del navegador una vez que hayan terminado. Con el uso de las cookies de sesión, la sesión finalizará automáticamente cuando se cierre el navegador o, de lo contrario, con un tiempo de espera de 30 minutos (se puede cambiar afaik).

Dado que de forma predeterminada no hay interacción entre el navegador y el servidor una vez que se carga una página, debe tener un contacto javascript en segundo plano en forms-pages para actualizar la sesión, pero parece un poco demasiados problemas para un problema menor.

3

Utilice AJAX para esconder regularmente los contenidos del formulario parcialmente completado para que no hayan perdido su trabajo si el sistema los inicia. Demonios, una vez que lo hagas, utiliza AJAX para evitar que su sesión caduque si pasan el tiempo escribiendo.

1

Quizás un proceso de javascript para mantener vivo podría ser útil en este caso. Si el script captura algunos desencadenadores clave, envía un mensaje "Todavía estoy escribiendo" al servidor para mantener la sesión activa.

2

Si el tiempo de espera de la sesión es tan corto que el usuario no tiene tiempo para rellenar un formulario, pondría un script AJAX que hace una solicitud http al servidor, cada pocos minutos, para mantener viva la sesión . Lo haría solo en las páginas que el usuario tiene que completar algo o ya ha comenzado a llenar algo.

Otra solución sería utilizar una secuencia de comandos de recordatorio de tiempo de espera de sesión que aparece un cuadro de diálogo para recordar al usuario que la sesión está a punto de agotarse. La ventana emergente debe mostrar "Cerrar sesión" y "Continuar usando la aplicación" que hace una solicitud ajax para actualizar el tiempo de espera de la sesión.

1

¿Ha considerado romper la forma en trozos más pequeños?

+0

Puede ser un poco molesto para el usuario, pero dividir las validaciones del lado del servidor puede ser menos molesto para el usuario cuando se equivoca. – CrashCodes

0

Como una alternativa para las soluciones técnicas, puede hacer que su aplicación sea tal que cada vez que se realiza un trabajo en particular, por ejemplo rellenando un formulario, le pregunte al usuario si desea continuar haciendo otro trabajo o si él ha terminado. Podría tener una pantalla de inicio con opciones de menú y, si el usuario elige una opción, primero debe ingresar sus credenciales.

O ponga un campo de contraseña en el formulario. Depende de la cantidad de formularios que deben completar en una sesión.

0

Cuando el usuario publica el formulario y su sesión ha expirado, debe asegurarse de guardar los valores del formulario en algún lugar y luego pedirle al usuario que vuelva a iniciar sesión. Una vez que hayan vuelto a autenticarte, pueden volver a enviar el formulario (ya que ninguno de sus datos se habrá perdido).

1

Controle el tiempo de espera y publique una ventana emergente para notificar al usuario que su sesión actual caducará y presentar los botones "Aceptar" o "Cancelar". Haga clic en Aceptar para mantener activa la sesión (es decir, restablecer el contador a otros 5 minutos o 10 minutos, lo que necesite) o Cancelar para permitir que la sesión continúe con la cuenta atrás hasta cero y, por lo tanto, finalice.
Esa es una de las muchas maneras de manejarlo.

0

Había desarrollado algo que requería una sesión muy larga. El usuario inició sesión en una página cuando se sienta en la máquina y luego de terminar su trabajo, se desconecta. Ahora puede usar el sistema por unos minutos o por horas. Para mantener la sesión activa hasta que se desconectó, utilicé el temporizador con javascript, fui al servidor y actualicé una etiqueta anthem con la hora actual en el servidor.

1

Usar un "hilo" de JavaScript para mantener la sesión abierta es, para mí, una mala idea.

Es contra la idea del tiempo de espera de la sesión que existe liberar algunos recursos si no hay un usuario frente a la aplicación.

Creo que debe ajustar el tiempo de espera de la sesión con el tiempo más preciso, para completar el formulario en un "uso normal normal".

Puede también ser proactivos por:

  1. tener una alerta de JavaScript mostrar una advertencia no intrusiva (no una ventana emergente) al usuario antes de expirar el tiempo de espera, que dicen que la sesión expirará pronto (y dar un enlace para enviar una solicitud ajax para restablecer el tiempo de espera y eliminar esa advertencia, que evitará que el usuario pierda el formulario que está escribiendo actualmente),
  2. y también tiene un segundo "hilo" de JavaScript, que, si la sesión ha expirado, redirija a la página de inicio de sesión con un mensaje que dice que la sesión ha expirado.

Cree que es lo mejor porque evita que el usuario complete un formulario complicado para nada, y maneja el caso cuando el usuario se ha ido.

Cuestiones relacionadas