Nuestra aplicación se cierra después de 30 minutos y se redirige a la página de inicio de sesión, estoy especificando tiempo de espera de sesión en web.xml y utilizando un requestProcessor para redirigir. Quiero mostrar al usuario un mensaje que dice Su sesión expiró una vez que la sesión expira, ¿cómo puedo hacer eso? ¿Cerrar sesión automáticamente? Me gustaría mostrar el mensaje de error en la página "La sesión ha expirado, vuelva a iniciar sesión". Entonces, ¿cómo podría detectar que la sesión ha expirado? ¿Se disparará cualquier método automáticamente?Cierre de sesión automático una vez que la sesión caduque
Respuesta
Crea un comprobador de actividad que comprueba cada minuto si ha tenido lugar alguna actividad del usuario (clic del mouse, tecla) y realiza un latido del servidor para mantener activa la sesión cuando el usuario está activo y no hace nada cuando el usuario no está activo. Cuando no hay actividad durante 30 minutos (o lo que sea que el tiempo de espera predeterminado de la sesión se haya establecido en el servidor), realice una redirección.
Aquí hay un ejemplo de kickoff con poca ayuda de jQuery para vincular los eventos de clic y pulsación de tecla y disparar la solicitud de ajax.
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$(document).ready(function() {
$.active = false;
$('body').bind('click keypress', function() { $.active = true; });
checkActivity(1800000, 60000, 0); // timeout = 30 minutes, interval = 1 minute.
});
function checkActivity(timeout, interval, elapsed) {
if ($.active) {
elapsed = 0;
$.active = false;
$.get('heartbeat');
}
if (elapsed < timeout) {
elapsed += interval;
setTimeout(function() {
checkActivity(timeout, interval, elapsed);
}, interval);
} else {
window.location = 'http://example.com/expired'; // Redirect to "session expired" page.
}
}
</script>
Crear una Servlet
que escucha en /heartbeat
y hace básicamente lo siguiente:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
request.getSession();
}
para mantener la sesión activa.
Cuando almacena al usuario que ha iniciado sesión en la sesión, se cerrará "automágicamente" cada vez que expire la sesión. Por lo tanto, no es necesario cerrar la sesión manualmente del usuario.
Si está utilizando sesiones servlet, puede verificar si la sesión que devuelve el jsp/servlet es nueva utilizando el método isNew(). Si es así, entonces la sesión del usuario ha expirado y puede mostrar los mensajes relevantes.
mensaje de expiración de la sesión del usuario debe mostrarse solo después del tiempo de espera, en su caso se mostrará incluso después de cerrar la sesión, que no necesito – sarah
crear una clase de escucha de la implementación de HttpSessionListener
y definirlo en web.xml
Esto le notificará cuando cualquier sesión se destruye. Use el método sessionDestroyed()
.
Véase un ejemplo completo aquí:
http://www.mkyong.com/servlet/a-simple-httpsessionlistener-example-active-sessions-counter/
La solución anterior no obligará al navegador a mostrar un cuadro de diálogo. –
La solución anterior forzará a la aplicación a solicitar el mensaje incluso después de cerrar sesión, no comprobará el tiempo de caducidad, digamos 30 minutos y mostrará el mensaje – sarah
Incluir una función de utilidad javascript dentro de su JSP y ping al servidor cada 31 minutos. La función de utilidad mencionada anteriormente debe usar la función JT setTimeout() internamente.
setTimeout ("checkServerSession()", /* intervalInMilliSeconds */ 31000);
Tenga en cuenta que
checkServerSession()
es una función regular JS que puede disparar las peticiones HTTP. Si la solicitud es exitosa, la sesión existe; de lo contrario, muestre la solicitud al usuario.
Déjeme saber un ejemplo, cómo puede funcionar esto – sarah
- 1. Zend Framework Cierre de sesión automático después de la inactividad
- 2. Método de invocación justo antes de que la sesión caduque
- 3. PHP - hacer que la sesión caduque después de X minutos
- 4. Implementar cierre de sesión automático + advertencia en asp.net + jquery?
- 5. ¿Cómo lograr el cierre de sesión automático en php?
- 6. Con ASP.NET MVC redirigir a la página de inicio de sesión cuando la sesión caduque
- 7. PHP ejecutar un script cuando caduque una sesión
- 8. Cómo redirigir a la página de inicio de sesión después de que la sesión caduque en GWT Llamada RPC
- 9. cierre de sesión y redirigir sesión en php
- 10. Google/OAuth 2 - Inicio de sesión automático
- 11. Django problema de cierre de sesión
- 12. Operador de cierre de sesión de Symfony
- 13. ¿Cómo diferenciar entre el cierre de sesión y la sesión expirada?
- 14. Tela inicio de sesión automático en Windows
- 15. Symfony2 tema de cierre de sesión
- 16. Establecer una cookie para que nunca caduque
- 17. Sesión que contiene elementos que implementan IDisposable
- 18. ¿Cómo puedo administrar la sesión en el inicio/cierre de sesión de Android?
- 19. ¿Cómo puedo redireccionar a una página cuando caduque la sesión del usuario?
- 20. autenticación de ASP.NET inicio de sesión y cierre de sesión con el botón Atrás del navegador
- 21. iOS: ¿Cómo autenticar a un usuario después de iniciar sesión (para inicio de sesión automático)?
- 22. Grails Spring Security Core mensaje de cierre de sesión
- 23. Django cierre la sesión del usuario con autenticación remota
- 24. Detección de cierre de sesión e inicio de sesión en powershell
- 25. ¿Cómo ignorar las solicitudes de inicio de sesión y cierre de sesión en JMeter?
- 26. La sesión PHP no está destruyendo después de que el usuario cerró la sesión
- 27. Caducidad de la sesión Django?
- 28. ¿Cómo puedo hacer que TMUX esté activo cada vez que inicio una nueva sesión de shell?
- 29. Django iniciar sesión/cerrar sesión
- 30. Detectar el cierre de sesión de Windows en Python
Quiero que se muestre el mensaje de alerta después de 30 minutos, ¿cómo puedo alterar la secuencia de comandos anterior, he definido el tiempo de espera de la sesión en web.xml – sarah
Este script muestra la ventana emergente incluso si la aplicación está en uso. – sarah
Eso puede suceder cuando hay varias ventanas abiertas en la misma sesión. Fue un ejemplo básico de patada de salida. Tendrá que dar algunos pasos más. Realice sondeos ajaxical en el servidor para mantener la sesión activa mientras el usuario esté activo. Puede encontrar un ejemplo en [esta otra respuesta mía] (http://stackoverflow.com/questions/2319020/mvc-with-jquery-handling-session-expire/2319211#2319211). – BalusC