2012-04-03 24 views
8

El escenario es que un usuario debería recibir una notificación (por ejemplo, alerta JS típica o redirección, etc.) cuando su sesión está a punto de expirar. Par de maneras en que esto se puede hacer esGestión del tiempo de espera de la sesión en el lado del cliente

  1. uso de JavaScript tiempo de espera función de como se explica here.
  2. Usando Server Push usando WebSockets que por supuesto necesitaría soporte de HTML5.

¿Cuáles son los méritos/deméritos relativos de estos dos enfoques? Aparte de estos, hay otras formas en que esto se puede lograr (alguna biblioteca estándar, etc.). Mi back end es Java EE (Struts + Spring).

Respuesta

6

Al utilizar la función de tiempo de espera de javascript, debe asegurarse de que si el usuario realiza llamadas AJAX, su función debe restablecerse, ya que debe tratarse como actividad del usuario.

Si el servidor que utiliza push usa websockets, es posible que no pueda orientar a los usuarios que no tengan los navegadores más recientes. Puede que tenga que usar algunos marcos de señalización e incluso cambiar su pila de backend. (Puedo pensar en socket.io & SignalR a partir de ahora)

Ambos enfoques no van a degradarse con gracia. Por lo tanto, la opción de IMO javascript suena mejor, ya que puede dirigirse a un público más amplio y eso requeriría abordar algunos escenarios de casos extremos. Si tuviera una opción, no implementaría esta función en absoluto. Pero apenas sucede de esa manera.

ACTUALIZACIÓN: Aquí hay otro enfoque que podría pensar.

Cada vez que se sirve una página, enviaría una cookie a la que se puede acceder desde el lado del cliente que contendría la hora UTC en la que se agotó el tiempo de espera de la sesión. En mi código colocaría un setInterval que leería el valor y compararía la hora local con UTC y si se cerrara, mostraría una ventana emergente diciendo que el tiempo de espera ocurrirá en X segundos, etc.

Esto nuevamente no se degrada con gracia y depende del tiempo de la máquina del cliente. Entonces, si es incorrecto, esta funcionalidad no funcionará de manera confiable.

1

¿Qué hay de la creación de un filtro donde se establece una cookie con el número de segundos que faltan hasta el tiempo de espera?

Por lo tanto, siempre se fijará el valor a (session-config> sesión de tiempo de espera) * 60.

En el lado frontal, utilizando setInterval, actualizaría valor de la cookie que restando el intervalo para el valor de cookie actual, de esa manera no depende de la configuración de tiempo.

+0

Esto es incluso seguro. El tiempo de espera de la sesión del lado del cliente se puede evitar fácilmente inyectando código js de la misma manera que a través de un complemento que actualiza el contador cada (tiempo de cierre de sesión - 1) –

Cuestiones relacionadas