这个需求比较常见,一般做法是在公共的引用文件中加入js定时器,定时检查session的状态。
公共文件一般是一些js,css文件,以及一些自己封装的js函数库等。
如在公共文件include_common.jsp文件中加入如下代码:
<!-- 每分钟检查session的状态,当session过期的时候,跳到登录页面 -->
<script type="text/javascript">
var sessionCheck = setInterval(function(){
// 获取session 状态
$.ajax({
url:'<%=path%>/getCurrentUser',
type:'post',
dataType:'json',
success:function(data){
if(data.result=='-1'){
console.log("session已过期");
location.href="<%=path%>/";
}else{
console.log("session未过期");
}
},
error:function(data){
console.log("session已过期");
location.href="<%=path%>/";
}
});
},1000*60);
function clear(){
clearInterval(sessionCheck);
}
</script>
// 获取当前session用户
public void getCurrentUser(){
String orgCode = getSessionAttr("orgCode");
Map<String,Object> map = new HashMap<String,Object>();
if(StrKit.notBlank(orgCode)){
map.put("result", "0");
}else{
map.put("result", "-1");
}
renderJson(JsonKit.toJson(map));
}
其中sessionCheck是全局变量,并编写清除定时检查的函数clear。
项目中的页面都引用了include_common.jsp文件,包括login.jsp文件。
但是如果session失效的话,跳转到了login.jsp页面,而login.jsp页面也引用了include_common.jsp页面,同样会执行定时session检查,所以在login.jsp页面要调用下clear()函数,清除该检查。