Control de tiempo inactividad de usuario JPS Javascript
Compañeros de foro. Acudo con un problema que no se como resolver a ver si me pueden ayudar.
Para una aplicación empresarial, se requiere que por medidas de seguridad se cierre la aplicación tras cierto tiempo de inactividad, específicamente a los 3 minutos. Sin embargo, un minuto antes de que expire la sesión, se le notifique al usuario mediante un mensaje de advertencia, de manera que el reanude la actividad o que termine la sesión, según su preferencia.
La aplicación esta basada en JEE con servlets y jsp, y en el jsp principal uso un JavaScript para simular un contador de tiempo donde al faltar un minuto se levanta un JavaScript Confirm. Si el usuario presiona el botón "Aceptar" del Confirm, en teoría se debe extender el tiempo de sesión (incluso cuando no haga ninguna actividad que implique peticiones al servidor) y si presiona cancelar, invalida la sesión y cierra la aplicación.
El script no funciona correctamente porque el timer cuenta dos minutos a partir de que se carga la pagina, y no logro sincronizar el tiempo del timer con el del ultimo acceso a la sesión, de manera de levantar el mensaje de Confirm de acuerdo a la ultima vez que el usuario realizo una operación que implicase una llamada al servidor, que seria lo correcto.
Por otra parte no encuentro la forma de hacer que la sesión del lado del servidor se mantenga viva, ya que en el web.xml se tiene configurado el máximo tiempo de inactividad permitido.
He probado varias cosas pero no me han funcionado. Supongo que por desconocimiento sobre el funcionamiento de la arquitectura.
Una de las opciones que leí en Internet era enviar una petición al servidor desde un Script con Jquery y Ajax. Esto para mantener la sesión viva del lado del servidor, pero creo que no tengo claro como usar Ajax porque no logro que haga nada. No se si esos son todos script src que debo usar o si hace falta algo más. Acá el código:
Leyendo el mensaje del Confirm me doy cuenta de que tampoco logro cerrar la aplicación si el usuario no presiona el botón aceptar, lo cual es uno de los comportamientos que desean para la aplicación.
Y pues lo de sincronizar los tiempos del timer y del ultimo acceso a la sesión pues...no tengo ni idea de como hacerlo.
Agradezco si alguien ve cual es la falla o tiene alguna otra idea que me puedan ayudar para implementar lo que necesito, lo apreciaría mucho.
- Inicie sesión o regístrese para enviar comentarios
en el server
En el server puedes ponerle tiempo de vida a la sesión (no recuerdo exactamente cómo era pero tienes que obtener el objeto de sesión y ponerle algún timeout).
Muchas gracias por
Muchas gracias por responder.
Si, el tiempo de inactividad se establece en un archivo que esta en el servidor (web.xml) el cual puedo acceder desde el JSP a través de request.getSession().getMaxInactiveInterval(). Esto me funciona correctamente, la session expira en el tiempo que he fijado acá.
Supongo que para el servidor, la inactividad se mide por la ausencia de peticiones hacia él mismo. Lo que no sé es como hacer para realizar una petición al servidor para que mantenga la sesión viva al momento de que el usuario me indique que desea extender el tiempo de sesión a través del confirm message que estoy levantando a través de JavaScript sin necesidad de refrescar la pagina.
ajax, timer
un timer que envíe una pequeña petición ajax.
Ejemplo
Quizás este ejemplo pueda ser de utilidad.
Voy a revisar y probar y te
Voy a revisar y probar y te aviso.
Igual gracias de antemano!
Si, eso me están sugiriendo.
Si, eso me están sugiriendo. Igual yo implementé uno pero no cumple con todo lo que necesito. Voy a revisar el código que me sugiere el amigo jpaul a ver si lo puedo adaptar. Gracias!
Utiliza este plugin yo lo
Utiliza este plugin yo lo hice con esto y como dice el buen Zamudio envia una peticion ajax.
El tiempo del idle lo puedes establecer con el que indicas desde el web.xml