在应用程序中,当用户注销并按下浏览器后退按钮时,它会将特定用户带到上一页(以上一个用户身份登录)。
当用户在索引(登录)页面中注销时,我尝试使用以下代码清除缓存
<%
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-store");
response.setHeader("Expires", "0");
response.setDateHeader("Expires", -1);
%>
以上代码在IE和Firefox中运行良好,但在谷歌浏览器中没有,
任何人都可以通过谷歌浏览器解决这个问题。
提前致谢。
答案 0 :(得分:1)
您需要更改以下内容:
response.setHeader("Cache-Control", "no-store");
为:
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
阅读this帖子以获取进一步说明。
答案 1 :(得分:1)
这里有两个错误:
Cache-Control
标头不完整。完整的正确标题集是:
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.
确保在测试前清除了浏览器缓存。
必须在受限页面的响应上设置这些标题,而不仅仅是在登录页面上。最简单的方法是创建一个servlet过滤器,该过滤器映射在与受限页面完全相同的URL模式上,并在doFilter()
方法中设置这些标头。
public class NoCacheFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
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.
chain.doFilter(req, res);
}
// ...
}
如果您已经在受限页面的URL模式上使用自定义过滤器,需要检查已登录用户的存在并处理重定向到登录页面,那么您也可以在改为使用相同的过滤器。