¿Por qué después de cerrar la sesión al hacer clic en el botón Atrás en la página, se muestra el contenido de la página anterior?

Estoy trabajando en un proyecto de Struts 2. Cuando el usuario hace clic en un botón de logout acción de logout borra la sesión mediante session.clear() . Pero cuando el usuario hace clic en el botón back en el navegador después de cerrar la sesión, todavía muestra el contenido de la página anterior. Quiero redirigir a un usuario a la página de inicio de sesión, si se hizo clic en el botón back en el navegador después de cerrar la sesión.

¿Hay algo más que deba aclarar en mi acción de cierre de sesión para resolver este problema? Cualquier ayuda será apreciada.

Resulta que su navegador está almacenando en caché las páginas antes de presionar el botón Atrás. El mecanismo de caché del navegador está diseñado para minimizar el tiempo de acceso al servidor obteniendo la página de la memoria caché local si la página tiene la misma URL. Reduce significativamente la carga del servidor cuando miles de clientes navegan por el servidor y parece ser muy útil. Pero en algunos casos, especialmente en los suyos, el contenido debe actualizarse. El botón Atrás está diseñado de modo que almacena en caché todas las páginas que un usuario está explorando y las recupera de la memoria caché local cuando se presiona el botón Atrás. Entonces, la solución es decirle al navegador que no permita el almacenamiento en caché al devolver una respuesta con encabezados especiales que controlan el almacenamiento en caché del navegador. En el entorno de servlet, puede usar un filtro para desactivar el almacenamiento en caché, pero en Struts2 puede usar un interceptor personalizado. Por ejemplo

 public class CacheInterceptor implements Interceptor { private static final long serialVersionUID = 1L; @Override public void destroy() {} @Override public void init() {} @Override public String intercept(ActionInvocation invoication) throws Exception { HttpServletRessponse response = ServletActionContext.getResponse(); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); response.setHeader("Expires", "-1"); return invoication.invoke(); } } 

Ahora puedes configurar este interceptor para usarlo en cada acción

           

Cuando los paquetes amplían default paquete default heredan el interceptor y la stack del interceptor, también puede anular esta configuración mediante la configuración de la acción.

Sucede porque su navegador almacena en caché la página en el cliente.

La solución es evitar el almacenamiento en caché de esa (s) página (s), forzando al navegador a solicitar una nueva página incluso cuando se presiona el botón Atrás, en lugar de leer la página guardada.

Debe leer:

  • Impedir que el usuario regrese a la página segura anterior después del cierre de sesión
  • Asegurarse de que una página web no esté en caché, en todos los navegadores

Realmente no sé struts. Pero un bash podría ser desactivar el almacenamiento en caché en los sitios donde debe iniciar sesión.

También puede guardar una cookie u otra cosa en su función de cierre de sesión y la página principal comprueba con AJAX si esta cookie está configurada. Y si es así, podría volver a cargar la página con JS (y, por supuesto, desarmar la cookie).

    Intereting Posts