当点击系统的退出按钮后,如果按浏览器的后退键仍能回到之前登录的页面的问题
试过了很多方法,也在网上查了下,最后自己总结的完美解决方法:
当点击系统退出按钮后,先调用Action层的doQuit()方法进行退出处理。
/***退出**/
public void doQuit(){
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
String quit = request.getParameter("quit");
if ("QUIT".equals(quit)) {
//清除登陆页面缓存HTTP1.0规范中的Pragma:no-cache等同于HTTP1.1规范中的Cache-Control:no-cache,同样可以包含在头信息中。
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache"); //强制缓存从服务器上获取新的页面
response.setHeader("Cache-Control", "no-store"); //在任何环境下缓存不保存任何页面
response.setDateHeader("Expires", 0);
request.getSession().removeAttribute("userInfo"); //清空session
request.getSession().invalidate(); // 销毁session
// 页面重定位到一个退出中间页面,倒计时。
String URL = "../toquit.jsp";
String content = 1 + ";URL=" + URL;// 1秒后进入退出页面
response.setHeader("REFRESH", content);
}
}
按道理经过上面的方法应该是已经把session清空销毁,浏览器缓存清空,但仍然没有解决遇到的问题;
这里我做了一个中间页面来处理:中间页面弹出一个对话框提示请登录,点击确定回到登录页面,这样浏览器的后退按钮已经失效,直接在浏览器地址输入地址也会弹出你还没登录,请重新登录,点击后回到登录页面,因为直接输入地址页面的session已经销毁,而那直接输入的地址页面如果session为空的话是不允许进入。
// 页面重定位到一个退出中间页面,倒计时。
String URL = "../toquit.jsp";
toQuit.jsp是一个中间页面如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>正在退出系统···</title>
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<link type="text/css" rel="stylesheet" href="css/public.css">
</head>
<body>
<table class="maintable" align="center" style="text-align: center;" width="500" cellspacing="0">
<tr height="100"><td></td></tr>
<tr><td>
<script type="text/javascript" language="JavaScript" > alert("请登录!");window.location.href="login.jsp";</script>
</td></tr></table>
</body>
</html>
下面是定时跳转的代码,与上面的问题无关:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>2秒后自动进入系统界面</title>
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<link type="text/css" rel="stylesheet" href="css/public.css">
<script language="javascript" type="text/javascript">
function delayURL(url) { //定时跳转
var delay = document.getElementById("time").innerHTML;
if(delay > 0) {
delay--;
document.getElementById("time").innerHTML = delay;
} else {
window.top.location.href = url;
}
setTimeout("delayURL('" + url + "')", 1000);
}
</script>
</head>
<body>
<table class="maintable" align="center" style="text-align: center;" width="500" cellspacing="0">
<tr height="100"><td></td></tr>
<tr><td>
<font size="4"><span id="time" style="background:red">2</span>秒后自动跳转到系统界面,如不跳转,请点击下面链接</font>
</td> </tr>
<tr><td><a href="login.jsp"><font color="blue" size="3">重新登录</font></a>
<script type="text/javascript">
delayURL("../index.jsp");
</script>
</td></tr></table>
</body>
</html>
本文介绍了一种彻底清除浏览器登录状态的方法,包括清除缓存、session销毁及使用中间页引导,确保用户退出后无法通过浏览器后退键返回登录状态。
1057

被折叠的 条评论
为什么被折叠?



