2009-12-31 9 views
7

Mi requisito es notificar al usuario con una ventana emergente que indica que la sesión del usuario está a punto de agotarse en segundos en caso de que el usuario no realice ninguna actividad en la página web.Notificar al usuario sobre el tiempo de espera de la sesión en Java EE

Además de este requisito, se disminuye dinámicamente el valor x segundos en la ventana emergente.

El entorno que uso es Java EE.

Respuesta

10

Haz uso de HttpSession#getMaxInactiveInterval() y setTimeout(). No hay necesidad de Ajax en este propósito particular, a menos que desee posponer el tiempo de espera en cada actividad del cliente (sondeo).

Ejemplo básico:

<script> 
    var secondsBeforeExpire = ${pageContext.session.maxInactiveInterval}; 
    var timeToDecide = 15; // Give client 15 seconds to choose. 
    setTimeout(function() { 
     alert('Your session is about to timeout in ' + timeToDecide + ' seconds!') 
    }, (secondsBeforeExpire - timeToDecide) * 1000); 
</script> 

para disminuir el tiempo dentro del mensaje mágicamente, a continuación, en lugar de la alert() básica que necesita una superposición con un div en el que usted tiene control sobre el contenido HTML a través del árbol DOM y utilice otro setTimeout() en 1 segundo para cambiar el texto dinámicamente.

Tenga en cuenta que esta secuencia de comandos debe ser atendida por el JspServlet para que el EL funcione. Por lo tanto, debe colocar la secuencia de comandos en el HTML <head> de la página JSP o, si realmente desea tener todas las JS en un archivo separado *.js, debe dejar que la JspServlet maneje las solicitudes *.js también.

+0

sugerencia realmente útil y hasta el punto. Gracias. –

+0

Tiene razón, no hay una estricta necesidad de AJAX, pero lo bueno de usar 'XMLHttpRequest' para actualizar la sesión es que el usuario no tendrá que desplazarse para evitar el tiempo de espera. Esto puede ser útil al completar un formulario, por ejemplo. –

+0

"si realmente desea tener todos los JS en un archivo * .js por separado, entonces debe permitir que el JspServlet maneje las solicitudes * .js también" - ¿puede explicar esto, no estoy familiarizado con JS, y tengo que poner esta función en un archivo * .js por separado, ya que tengo muchas páginas jsp? ¿Qué debo hacer para que esto funcione así? @BalusC –

1

No creo que Java/Java EE sea realmente útil aquí, ya que debe manejarse en el lado del cliente (es decir, usar JavaScript). Una solución que puedo pensar sería establecer un tipo de temporizador que notificaría al usuario unos minutos antes del tiempo de espera del servidor.

Mientras que buscando en Google sobre esto, me encontré con entrada en el blog de Eric Update User's Session with AJAX Pascarello (y la versión reloaded Updating User Session with Ajax - Round 2) que describe con precisión una solución de este tipo (y utilizar un XMLHttpRequest para actualizar la sesión). Su secuencia de comandos de Ajax Session Management está disponible here.

+0

BTW Ninguno de los enlaces está funcionando –

+0

El enlace al script está bien y otros dos se pueden encontrar en el archivo web: https://web.archive.org/web/20081203190028/http://radio.javaranch .com/pascarello/2005/10/25/1130246930301.html –

Cuestiones relacionadas