在我的web java应用程序中,我成功从主页面注销到索引页面但是当我单击浏览器的后退按钮时,我有了主页面,尽管我没有输入我的用户名和密码。
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
request.getRequestDispatcher("index.html").include(request, response);
HttpSession session=request.getSession();
session.invalidate();
out.close();
}
答案 0 :(得分:2)
我点击了浏览器的后退按钮 尽管我没有输入我的用户名和密码
浏览器后退按钮不向服务器发出请求。它是从缓存页面加载的,所以即使你有会话验证它也不会在这里工作。
您可以使用客户端脚本来解决此问题。我通过使用此脚本解决了同样的问题,您需要在需要有效会话的所有页面上进行此操作。
编辑:
<script>
history.forward();
if(window.attachEvent) {// extra step for IE
window.attachEvent('onload', function() {});
}
</script>
答案 1 :(得分:1)
这肯定是由浏览器的缓存引起的。
您可以通过设置一些标题信息来关闭登录页面的缓存。
引自this answer:
// Set standard HTTP/1.1 no-cache headers.
response.setHeader("Cache-Control", "private, no-store, no-cache, must-revalidate");
// Set standard HTTP/1.0 no-cache header.
response.setHeader("Pragma", "no-cache");
//Proxies
response.setDateHeader("Expires", 0);