java 判断session是否为空_实现session超时后自动跳转到登陆页面(前台JS,JAVA,判断是否Ajax请求)...

JS实现页面超时后自动跳转到登陆页面

网友方案:

var myTime = setTimeout("Timeout()", 60000);

function resetTime() {

clearTimeout(myTime);

myTime = setTimeout('Timeout()', 60000);

}

function Timeout() {

alert("您的登录已超时, 请点确定后重新登录!");

document.location.href='login.jsp';

}

document.documentElement.οnkeydοwn=resetTime;

document.doocumentElement.οnclick=resetTime;

实际操作:

window.onload = function caoke(){

setTimeout(wo,1000*10);

}

function wo(){

alert("由于您长时间没有操作,为保证您的安全,

请重新登录!");

window.location.href = "${ctx}" ;

if(window.parent != window){

window.parent.location.reload(true);

}

}

java 后台 过滤器实现

@Override

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

boolean isExclude = false ;

HttpServletRequest request = (HttpServletRequest) req ;

HttpServletResponse response = (HttpServletResponse) res ;

String url = request.getServletPath() ;

System.out.println(url);

for (String page : excludedPageArr) {//判断是否在过滤url之外

if(request.getServletPath().equals(page)){

isExclude = true;

break ;

}

}

String uString = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath() ;

if(isExclude){//在过滤url之外

chain.doFilter(request, response);

} else {//不在过滤url之外,判断session是否存在

HttpSession session = request.getSession();

int time = session.getMaxInactiveInterval();

if (session.getAttribute("user") == null) {

//这里进行了判断是不是ajax请求,ajax请求不能够把返回的js信息执行

if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {

response.addHeader("sessionstatus", "timeOut");

response.addHeader("loginPath", request.getContextPath());

chain.doFilter(request, response);// ajax请求的判断,先放行,没有找到解决方案

} else {

//正常的请求可以直接弹出提示。

response.setCharacterEncoding("utf-8");

response.setContentType("text/html;charset=UTF-8");

PrintWriter writer = response.getWriter();

String data = "

data += "alert('由于您长时间没有操作,为保证您的安全,请重新登录!');" ;

data += "window.top.location.href = '"+request.getContextPath()+"' ;" ;

//data += "if(window.parent != window){" ;

//data += "window.parent.location.reload(true);" ;

//data += "}" ;

data += "" ;

writer.print(data);

writer.close();

}

} else {

chain.doFilter(request, response);

}

}

}

客户端JS,用于ajax请求session超时

对于jquery

$(document).ajaxComplete(function(event, xhr, settings) {

if(xhr.getResponseHeader("sessionstatus")=="timeOut"){

if(xhr.getResponseHeader("loginPath")){

alert("由于您长时间没有操作,为保证您的安全,请重新登录!");

window.top.location.href = xhr.getResponseHeader("loginPath") ;

}else{

alert("请求超时请重新登陆 !");

}

}

});

对于extjs的ajax请求

Ext.Ajax.on('requestcomplete',checkUserSessionStatus, this);

function checkUserSessionStatus(conn,response,options){

if(response.getResponseHeader("sessionstatus") == 'timeout'){

if(response.getResponseHeader("loginPath")){

alert("会话过期,请重新登陆!");

window.top.location.href = response.getResponseHeader("loginPath");

}else{

alert("请求超时请重新登陆 !");

}

}

}

如果使某个ajax请求不受全局方法的影响,那么可以在使用$.ajax()方法时,将参数中的global设置为false,jquery代码如下:

$.ajax({

url:"test.html",

global:false//不触发全局ajax事件

})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值