基于Ajax请求会话超时的处理

本文详细介绍了如何在会话超时丢失登录信息时,页面自动跳转至登录页的同步请求处理方法。同时,针对异步请求场景,通过X-Requested-With请求头判断请求类型,并采用Ajax技术进行页面跳转或返回JSON状态提示,实现了客户端的响应式处理。以JQuery和Ext框架为例,展示了如何简化异步请求下的登录验证流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

会话超时丢失了登录信息,那么页面将会跳转到login.jsp。必要注意的是,登录时验证用户名和暗码的方法不可以拦截,不然将不可以登录。

  二、异步请求下的会话超时处理

  上述方法可以处理同步请求下会话超时的难题,可是跳转到登录页是办事端跳转,假设应用Ajax技术发起请求,显然是无法处理页面跳转的,所以在做登录验证拦截时,必要返回一个字符串,报告客户端会话超时,客户端再做出客户端跳转。

  首先必要办事端去判断,请求是同步请求和异步请求,在firefox的firebug插件帮助下,发现现在端应用JQuery和Ext框架时(别的框架未作检测),会在请求头部参加X-Requested-With的头信息,而同步请求没有这个头信息。所以,可以经过X-Requested-With这个请求头,判断请求是同步还是异步的,在拦截器里,参加该判断。

  private String isAjax(HttpServletRequest request,HttpServletResponse response){

   if(request.getHeader(“x-requested-with“)!=null

   && request.getHeader(“x-requested-with“).equalsIgnoreCase(“XMLHttpRequest“)){

   PrintWriter writer = response.getWriter();

   writer.print(“{sessionState:0}“);

   return null;

   } else { return Action.LOGIN; }

  }

  在拦截器的intercept方法里,将代码改为:

  if (session.get(“user“)==null) { return isAjax; }

   这样假设是异步请求,客服端只必要判断传回的值为{sessionState:0},即为登录超时或未登录。可是每个Ajax请求均如此处理,会显得即为繁琐。以JQuery为例,提供了几个全局方法,可以定义JQuery的全局方法来实现该判断。

  $.ajaxSetup({

   complete:function(XMLHttpRequest, status){

   var res=XMLHttpRequest.responseText;

   if(res==“{sessionState:0}“){ location.href = “login.jsp“;}

   }

  });

  该方法在每个Ajax请求完成时触发,会判断客服端只必要判断传回的值是否为{sessionState:0},是即执行跳转。

 

 

转自:http://www.wenlun.com/paperfree/1202/12020780058_2.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值