【发布时间】:2011-07-05 14:48:31
【问题描述】:
如何停止使用 Servlet 在浏览器中缓存页面?
如果我在登录时按下浏览器的返回按钮,我希望该会话过期。
【问题讨论】:
如何停止使用 Servlet 在浏览器中缓存页面?
如果我在登录时按下浏览器的返回按钮,我希望该会话过期。
【问题讨论】:
如果您为请求获得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");
请参阅 HttpServletResponse 和 HttpServletResponseWrapper 的文档。如果您需要阅读 HTTP 中的缓存控制标头,check this out。
【讨论】:
setHeader()中的任何一个就足够了?
response.setHeader("Expires", "-1");我们为什么要使用-1
永久禁用缓存。
// 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();
【讨论】: