Estoy desarrollando una web de Java EE aplicación con Struts. El problema es con Internet Explorer de almacenamiento en caché. Si un usuario cierra la sesión se puede acceder a algunas páginas porque están almacenados en caché y no se hizo la petición. Si me actualización funciona bien. Asimismo, si un usuario va a la página de inicio de sesión de nuevo no va a redirigir a él, porque esa página también se almacenan en caché.

Dos soluciones vienen a mi mente:

  1. La escritura de un Interceptor (servlet filtro) para agregar encabezado de respuesta no-cache etc.
  2. O o poner <meta> etiquetas en cada página.

Que uno debería hacer?

  • La versión de Struts estás usando?
  • He encontrado que la adición de los encabezados no-cache no siempre funciona en IE.
  • Al parecer se le olvidó el Expires encabezado. Véanse también las respuestas a esta pregunta.
  • entonces, ¿cuál es la solución para esto?
InformationsquelleAutor GorillaApe | 2010-05-17

5 Comentarios

  1. 29

    Vez establecido los siguientes encabezados en el HttpServletResponse de la página(s) en cuestión, de modo que usted no necesita copypaste lo largo de todas las páginas de forma manual:

    response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); //HTTP 1.1.
    response.setHeader("Pragma", "no-cache"); //HTTP 1.0.
    response.setDateHeader("Expires", 0); //Proxies.

    Esto es equivalente a establecer la siguiente meta en los encabezados de la página(s) manualmente:

    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Expires" content="0">

    Ver también esta respuesta. No olvides borrar la caché del navegador antes de la prueba 😉

  2. 5

    He encontrado el siguiente trabajo bien:

    response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform, pre-check=0, post-check=0, private");
    response.setHeader("Pragma", "no-cache");
    response.setDateHeader("Expires", 0);

    De las etiquetas en esta pregunta parece que estás usando Struts. Struts 1.x permite hacer esto a través de la configuración en struts-config.xml mediante el establecimiento de nocache="true" en el controller elemento:

    <controller processorClass="org.apache.struts.tiles.TilesRequestProcessor" nocache="true" />

    Mark Nottingham el almacenamiento en caché tutorial es el mejor recurso que he visto en la web sobre HTTP y el almacenamiento en caché si usted está buscando para entender más.

    Que se dice, dependiendo del problema que estamos viendo podría ser una historia de navegador problema. Ver aquí para obtener más información acerca de eso.

    • BTW: sólo los tres primeros Cache-Control propiedades como se muestra en el ejemplo es suficiente, ellos (y el Expires encabezado) ya «implícitamente», establece el posterior propiedades a los valores deseados.
    • Llegamos a esos valores, mientras que la investigación de un problema donde los usuarios con la Ópera fueron capaces de ver las páginas seguras en su historial del navegador después de cerrar la sesión y la destrucción de su sesión. Ese valor fue utilizado como una solución. Estoy tratando de encontrar el enlace original que explicó cómo esos valores se llegó pero no he podido hasta ahora. Quizás es una exageración aunque, dado que lo único que he aprendido acerca de las diferencias entre la memoria caché del navegador y el historial del navegador después de esa investigación.
    • Hubo, de hecho, una relacionada con el Opera 8.x error que fue corregido en la mitad de la década anterior. También el almacenamiento en caché de una redirección no se hizo correctamente en este navegador. Pero prácticamente nadie usa Opera 8 hoy en día.
  3. 2

    Parece IE < 9 todavía caché incluso si usted tiene pragma: no-cache en la cabeza y en el conjunto del navegador para actualizar en cada carga de página. Usted necesita para agregar las etiquetas meta de nuevo en una segunda sección de la cabeza antes de cerrar el html. Esto es correcto desde MS sí mismo.

    http://support.microsoft.com/kb/222064/

    poco mejor explicación aquí

    http://www.htmlgoodies.com/beyond/reference/article.php/3472881/So-You-Dont-Want-To-Cache-Huh.htm

    De las pruebas también se necesita la Caduca: -1 etiqueta meta para hacer el trabajo. Se recomienda el uso de Expiración: -1 y 0.

  4. 0

    Añadir etiqueta type=»button» en el botón de acción.

    El valor predeterminado del tipo de atributo depende del documento actual modo de compatibilidad. El valor predeterminado es presentar. En otros modos de compatibilidad el valor predeterminado es el botón.
    Cuando el elemento de BOTÓN es presentado en un formulario, el valor depende del documento actual modo de compatibilidad.
    Windows Internet Explorer 8 y versiones posteriores. El valor predeterminado del tipo de atributo depende del documento actual modo de compatibilidad. En IE8 Normas modo, el valor predeterminado es presentar. En otros modos de compatibilidad y versiones anteriores de Windows Internet Explorer, el valor predeterminado es el botón.
    Internet Explorer 8 y versiones posteriores. Cuando el elemento de BOTÓN es presentado en un formulario, el valor depende del documento actual modo de compatibilidad. En IE8 modo, el valor del atributo es presentado. En otro documento, de los modos y las versiones anteriores de Internet Explorer, el innerText valor es presentado.

    http://msdn.microsoft.com/en-us/library/ie/ms535211(v=vs 85).aspx

  5. -1

    Modificar las cabeceras con las no-cache etc. Es la forma habitual.

    • Así que escribir un interceptor es mejor…me Podría decir que los encabezados para agregar? Porque veo varios encabezados que se debe poner

Dejar respuesta

Please enter your comment!
Please enter your name here