【问题标题】:How to clear browser cache from servlet?如何从 servlet 清除浏览器缓存?
【发布时间】:2013-11-24 05:45:37
【问题描述】:

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

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

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。

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

【问题讨论】:

    标签: java jsp servlets cache-control


    【解决方案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页面缓存的方法。它还可以设置会话的非活动超时时间

    【讨论】:

    • “这就是方式”是什么意思?
    【解决方案2】:

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

    另请参阅: How to control cache in JSP page?:

    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 和刷新以编程方式清除缓存,但我怀疑这是否是您正在寻找的: How to programmatically empty browser cache?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-17
      • 2021-01-25
      • 2010-11-05
      • 2011-02-04
      • 2016-02-18
      相关资源
      最近更新 更多