2

当我单击注销按钮时,我希望清除浏览器缓存。

我正在尝试使用以下代码清除浏览器缓存:

if(uri.equals("/SciArchive/logout.sci"))
    {
        HttpSession session=req.getSession(false);
         res.setHeader("Cache-Control","no-cache"); 
             res.setHeader("Cache-Control","no-store"); 
             res.setDateHeader("Expires", 0); 
             res.setHeader("Pragma","no-cache"); 
        if(session!=null)
        {
            session.invalidate();
            rd=req.getRequestDispatcher("/home.jsp");               
        }

        rd.forward(req,res);
        return;
    }

注销后在浏览器窗口中按下后退按钮时,我需要浏览器不显示上一页。

当我单击后退按钮时,它显示上一页,单击浏览器窗口中的前进按钮后,它显示document expired.

请给我建议以清除此错误!

4

2 回答 2

6

你不能清除缓存,但你可以要求你的页面不会被缓存。这意味着您必须对会话中的每个页面都这样做(否则后退按钮将继续工作,并且您的注销页面是唯一未缓存的页面)。

另请参阅: 如何控制 JSP 页面中的缓存?

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

编辑:显然可以使用 javascript 和刷新以编程方式清除缓存,但我怀疑这就是你要找的: 如何以编程方式清空浏览器缓存?

于 2013-11-12T07:22:36.643 回答
1
<%
response.setHeader("Cache-Control", "no-cache");

//Forces caches to obtain a new copy of the page from the origin server
response.setHeader("Cache-Control", "no-store");

//Directs caches not to store the page under any circumstance
response.setDateHeader("Expires", 0);

//Causes the proxy cache to see the page as "stale"
response.setHeader("Pragma", "no-cache");
//HTTP 1.0 backward enter code here

String userName = (String) session.getAttribute("plno");
if (null == userName) {
  //request.setAttribute("Error", "Session has ended.  Please logenter code herein.");
  RequestDispatcher rd = request.getRequestDispatcher("Login.jsp");
  rd.include(request, response);
  out.println("Session has ended.  Please login.");
}
%>

这是如何清除jsp页面中的缓存。它还可以设置会话的非活动超时

于 2014-05-11T13:16:30.717 回答