如何防止Servlet的结果被缓存?

时间:2011-02-28 08:47:18

标签: java caching servlets

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

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

2 个答案:

答案 0 :(得分:10)

永久禁用缓存。

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

答案 1 :(得分:2)

如果您获得了请求的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