17

我正在使用 Struts 开发一个 Java EE Web 应用程序。问题在于 Internet Explorer 缓存。如果用户注销,他可以访问某些页面,因为它们被缓存并且没有请求。如果我点击刷新它工作正常。此外,如果用户再次进入登录页面,它不会重定向他,因为该页面也被缓存。

我想到了两个解决方案:

  1. 编写一个拦截器(类似 servlet 过滤器)以添加到响应标头无缓存等。
  2. 或者<meta>在每个页面上放置标签。

我应该做哪一个?

4

5 回答 5

30

而是在有问题的页面上设置以下标题,HttpServletResponse这样您就不需要手动将其复制粘贴到所有页面上:

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.

这相当于在页面中手动设置以下元标题:

<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">

另请参阅此答案。不要忘记在测试前清除浏览器缓存;)

于 2010-05-17T12:49:43.043 回答
5

我发现以下内容运行良好:

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);

从这个问题的标签看来,您正在使用 Struts。Struts 1.x 允许您通过在 struts-config.xml 中通过设置元素来nocache="true"进行配置:controller

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

如果您想了解更多信息, Mark Nottingham 的缓存教程是我在网上看到的关于 HTTP 和缓存的最佳资源。

话虽如此,根据您看到的问题,它可能是浏览器历史记录问题。有关详细信息,请参见此处。

于 2010-05-17T13:03:50.147 回答
2

看起来 IE < 9 仍然会缓存,即使您有编译指示:头部没有缓存并将浏览器设置为在每次页面加载时刷新。在关闭 html 之前,您需要在第二个 head 部分中再次添加元标记。这是正确的来自 MS 本身。

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

这里有更好的解释

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

通过测试,您还需要 Expires: -1 元标记才能使其工作。建议使用 Expires: -1 而不是 0。

于 2012-01-30T17:52:51.550 回答
0

将标签 type="button" 添加到实际操作按钮中。

type 属性的默认值取决于当前文档的兼容模式。默认值为提交。在其他兼容模式下,默认值为 button。当 BUTTON 元素在表单中提交时,其值取决于当前文档的兼容模式。Windows Internet Explorer 8 及更高版本。type 属性的默认值取决于当前文档的兼容模式。在 IE8 标准模式下,默认值为提交。在其他兼容模式和早期版本的 Windows Internet Explorer 中,默认值为 button。Internet Explorer 8 及更高版本。当 BUTTON 元素在表单中提交时,其值取决于当前文档的兼容模式。在 IE8 模式下,提交 value 属性。在其他文档模式和早期版本的 Internet Explorer 中,

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

于 2013-10-21T08:29:44.963 回答
-1

使用 no-cache 等修改标头。这是通常的方法。

于 2010-05-17T12:24:04.117 回答