如何用Java结合session实现浏览器点击后退按钮不加载登出前的网站页面
解决方案
1. 给受保护页面添加会话校验逻辑
你当前只配置了缓存头,缺少对index.jsp、view.jsp这类需要登录才能访问的页面的登录状态校验,需要在这两个页面的最顶部添加如下代码,注意要放在所有HTML输出和缓存头设置之前:
<% // 此处的loginUser替换为你登录时存入session的用户属性名 Object loginUser = session.getAttribute("loginUser"); if(loginUser == null) { // 未登录状态直接跳转到登录页 response.sendRedirect("login.jsp"); return; } %>
2. 调整logout.jsp的代码执行顺序
你当前把session销毁的逻辑放在了HTML内容之后,会导致session销毁前响应内容已经输出,相关头配置可能不生效。修改后的logout.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=US-ASCII" pageEncoding="US-ASCII"%> <% // 所有逻辑处理放在页面内容输出之前 session.invalidate(); // 先销毁session response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); response.setHeader("Pragma", "no-cache"); response.setHeader("Expires", "0"); %> <!DOCTYPE html> <html> <head> <meta charset="US-ASCII"> <title>Logout Page</title> </head> <body> <h1>You have logged out of the system!</h1> <a href="login.jsp">Back to the Login Page</a> </body> </html>
3. 确认缓存头配置生效
确保所有jsp页面的缓存头设置代码都放在页面最顶部,不要有任何空格、换行、HTML内容在这段代码之前,避免响应提前提交导致头配置不生效。
修改完成后,用户登出后点击后退,要么浏览器因为无缓存会重新请求受保护页面,后端校验到session为空会直接跳转到登录页;哪怕浏览器加载了本地快照,用户也无法在页面上进行任何需要登录态的操作,刷新后也会自动跳转到登录页。
内容的提问来源于stack exchange,提问作者bobas_13
相关产品推荐
相关产品推荐

