【问题标题】:How to prevent the result of Servlets from being cached?如何防止 Servlet 的结果被缓存?
【发布时间】:2011-07-05 14:48:31
【问题描述】:

如何停止使用 Servlet 在浏览器中缓存页面?

如果我在登录时按下浏览器的返回按钮,我希望该会话过期。

【问题讨论】:

标签: java caching servlets


【解决方案1】:

如果您为请求获得HttpServletResponse(实现)对象,您可以发送 HTTP 标头,这将鼓励浏览器不缓存您发送给它们的内容。

HttpServletResponse response; // You'll need to initialize this properly

response.setHeader("Cache-control", "no-cache, no-store");
response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "-1");

请参阅 HttpServletResponseHttpServletResponseWrapper 的文档。如果您需要阅读 HTTP 中的缓存控制标头,check this out

【讨论】:

  • 以上所有行都是必需的还是setHeader()中的任何一个就足够了?
  • @Alpine 取决于浏览器。请参阅我刚刚添加的有关缓存控制标头的链接。这些只是示例。
  • R.Younce:谢谢..但我仍然遇到问题。登录后,如果我按返回然后转发会话仍在进行中
  • @Prashant 你说你想避免缓存。你到底想过期什么?
  • response.setHeader("Expires", "-1");我们为什么要使用-1
【解决方案2】:

永久禁用缓存。

  // Set to expire far in the past.
  response.setHeader("Expires", "Sat, 6 May 1995 12:00:00 GMT");

  // Set standard HTTP/1.1 no-cache headers.
  response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");

  // Set IE extended HTTP/1.1 no-cache headers (use addHeader).
  response.addHeader("Cache-Control", "post-check=0, pre-check=0");

  // Set standard HTTP/1.0 no-cache header.
  response.setHeader("Pragma", "no-cache");

清除客户端缓存不会立即使会话过期,但会清除浏览器中的会话 cookie。要使会话立即过期,需要在服务器端的jsp或servlet中明确指定。

// use session invalidate
session.invalidate();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 2011-10-19
    • 2015-01-06
    • 2019-02-03
    相关资源
    最近更新 更多