java - reales - libro de android studio en español pdf
¿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? (3)
Realmente no sé struts. Pero un intento 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).
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
<package name="default" extends="struts-default" abstract="true">
<interceptors>
<interceptor name="cache" class="org.yourcompany.struts.interceptor.CacheInterceptor "/>
<interceptor-stack name="cacheStack">
<interceptor-ref name="cache"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="cacheStack"/>
</package>
Cuando los paquetes amplían default
paquete default
heredan el interceptor y la pila 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