关于Extjs异步session超时问题处理、jQuery session超时问题处理

转自:http://relucent.iteye.com/blog/708535

关于Extjs异步session超时问题处理


对于HTTP超时的判断,我们可以通过过滤器Filter来判断。
如果页面超时,我们可以使用诸如request.forward() 之类的方法跳转到登陆页面。

但是对于Ajax请求,request.forward()就无能为力了。
并不是因为request.forward()不起作用,而是因为AJAX的原理,所以整个页面是不会做刷新操作。
(PS: request.forward()后的页面文本能够通过XMLHttpRequest.responseText获取)

于是我们需要另一种方法来进行跳转。

其中简单的方法是设置httpStatus的状态,然后ExtJs监听

 

JAVA

Java代码   收藏代码
  1. if( 超时 ){  
  2.     if("XMLHttpRequest".equals(request.getHeader("x-requested-with"))){  
  3.         response.setStatus(401);  
  4.     }  
  5. }  

 

JAVASCRIPT

 

Js代码   收藏代码
  1. Ext.Ajax.on('requestcomplete',function(conn,response,options) {   
  2.     if(response.statusText==401){  
  3.         Ext.Msg.alert('提示''会话超时,请重新登录!'function(){  
  4.             window.location = 'http://localhost:8080/login.jsp';   
  5.         });  
  6.     }  
  7. });  

 


jQuery Sessin超时

服务器端:

if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){
    // response.setStatus(911);//表示session timeout -- ExtJS
    //在响应头设置session状态 -- jquery session timeout
    response.setHeader("sessionstatus", "sessionOut");
    response.getWriter().print("sessionOut");
}

浏览器端:在ajax的complete方法中添加
<pre code_snippet_id="597233" snippet_file_name="blog_20150204_2_3158834" name="code" class="html">complete: function(xhr, type) {
      // 通过XMLHttpRequest取得响应头,sessionstatus,
       var sessionstatus=xhr.getResponseHeader("sessionstatus");
       if(sessionstatus=="sessionOut"){
           window.location.replace("./");
           alert(sessionstatus);
       }
}

 





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值