Pregunta

Tengo una aplicación de servlet implementada en el lado oc4j.

Estoy intentando invalidar la sesión del usuario después 1 minuto usando:

session.setMaxInactiveInterval(1 * 60);

Pero lo que sucede es que se necesita más de 1 minuto (y puede llegar a 1 minuto y medio) antes de que la sesión se destruya.

¿Es esto un problema de implementación o qué?

¿Fue útil?

Solución

Parece que estás comprobando la destrucción esperando hasta que HttpSessionListener#sessionDestoryed() recibir una llamada en lugar de enviar una solicitud HTTP al servidor después de exactamente 1 minuto.

La destrucción de la sesión se realiza en la mayoría de los servidores administrados por un trabajo en segundo plano que se ejecuta a intervalos, que pueden ser cada minuto o más dependiendo de la marca/versión del servidor, la configuración y posiblemente también la carga.Este trabajo comprueba si todas las sesiones abiertas han caducado o no y barre las caducadas en consecuencia.Por lo tanto, no es cierto que la destrucción de sesión sea inmediatamente Se llama en el mismo segundo en que expira la sesión, siempre y cuando el cliente no haya enviado una solicitud.Este trabajo en segundo plano no se ejecuta cada segundo, habría consumido demasiado CPU.

Sin embargo, la destrucción de sesión se llamará inmediatamente cada vez que el servidor recupere una solicitud con un ID de sesión mientras la sesión todavía está presente en la memoria del servidor pero ha caducado.

Entonces, tendrías que aceptarlo o cambiar tu metodología de prueba.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top