JS Ajax请求会话过期处理问题解决方法分析


Posted in Javascript onNovember 16, 2019

本文实例讲述了JS Ajax请求会话过期处理问题解决方法。分享给大家供大家参考,具体如下:

对于页面来说,处理session过期比较简单,一般只需在过滤器里面判断session用户是否存在,不存在则跳转页面到登陆页即可。

对于Ajax请求来说,这个办法则无效,只能获取到登录页的html代码。原因在于Ajax请求是XMLHTTPRequest对象发起的而不是浏览器,而服务器返回的信息接收者也是XMLHTTPRequest,非浏览器。

解决办法:

服务器端

可在返回的ResponseHeader里添加一个标识变量,以便在Javascript里处理。以Java为例,可在过滤器里进行如下处理:

try {
  // Ajax请求会话过期处理
  String requestType = request.getHeader("X-Requested-With");
  if (StringUtils.isNotEmpty(requestType) && requestType.equalsIgnoreCase("XMLHttpRequest")) {
    response.setHeader("SessionStatus", "sessionTimeOut");
    requestContext.abortWith(Response.status(401).build());
    return;
  }
  // 处理页面跳转
  requestContext.abortWith(Response.accepted().build());
  response.sendRedirect(loginPath);
} catch (IOException ex) {
  //do nothing
}

Javascript端

可通过JQuery的ajaxComplete方法进行处理,判断发送请求时是否会话已过期。

/**
 * ajax请求判断会话是否已过期
 */
$(document).ajaxError(function (event, jqXHR, options, errorMsg) {
  var sessionStatus = jqXHR.getResponseHeader('SessionStatus');
  if (sessionStatus && sessionStatus === 'sessionTimeOut') {
    alert("您的会话已过期,请重新登录");
    location.href = "login";
  }
});

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
基于jquery用于查询操作的实现代码
May 10 Javascript
Struts2的s:radio标签使用及用jquery添加change事件
Apr 08 Javascript
javascript中encodeURI和decodeURI方法使用介绍
May 06 Javascript
jquery任意位置浮动固定层插件用法实例
May 29 Javascript
JavaScript截取、切割字符串的技巧
Jan 07 Javascript
js实现精确到秒的倒计时效果
May 29 Javascript
javascript高级模块化require.js的具体使用方法
Oct 31 Javascript
使用react实现手机号的数据同步显示功能的示例代码
Apr 03 Javascript
js中对象与对象创建方法的各种方法
Feb 27 Javascript
解决layui动态加载复选框无法选中的问题
Sep 20 Javascript
layui-select动态选中值的例子
Sep 23 Javascript
利用JavaScript写一个简单计算器
Nov 27 Javascript
vue中注册自定义的全局js方法
Nov 15 #Javascript
微信sdk实现禁止微信分享(使用原生php实现)
Nov 15 #Javascript
微信JSSDK实现打开摄像头拍照再将相片保存到服务器
Nov 15 #Javascript
微信小程序自定义导航栏(模板化)
Nov 15 #Javascript
在node环境下parse Smarty模板的使用示例代码
Nov 15 #Javascript
微信小程序自定义头部导航栏(组件化)
Nov 15 #Javascript
create-react-app中添加less支持的实现
Nov 15 #Javascript
You might like
php基础知识:函数基础知识
2006/12/13 PHP
最常用的8款PHP调试工具
2014/07/06 PHP
PHP如何开启Opcache功能提升程序处理效率
2020/04/27 PHP
PHP tp5中使用原生sql查询代码实例
2020/10/28 PHP
js arguments对象应用介绍
2012/11/28 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
2013/08/13 Javascript
jquery选择器大全 全面详解jquery选择器
2014/03/06 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
DOM节点深度克隆函数cloneNode()用法实例
2015/01/12 Javascript
angular实现表单验证及提交功能
2017/02/01 Javascript
Bootstrap轮播图学习使用
2017/02/10 Javascript
JavaScript中双向数据绑定详解
2017/05/03 Javascript
nodejs处理图片的中间件node-images详解
2017/05/08 NodeJs
JavaScript基本语法_动力节点Java学院整理
2017/06/26 Javascript
Vue.js2.0中的变化小结
2017/10/24 Javascript
vue实现多个元素或多个组件之间动画效果
2018/09/25 Javascript
React Component存在的几种形式详解
2018/11/06 Javascript
es6函数之尾递归用法实例分析
2020/04/25 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
2020/07/18 Javascript
在vue中给后台接口传的值为数组的格式代码
2020/11/12 Javascript
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
Python3生成手写体数字方法
2018/01/30 Python
Python爬虫抓取技术的一些经验
2019/07/12 Python
Python字典生成式、集合生成式、生成器用法实例分析
2020/01/07 Python
jupyter notebook 的工作空间设置操作
2020/04/20 Python
python中实现词云图的示例
2020/12/19 Python
html5页面结构_动力节点Java学院整理
2017/07/10 HTML / CSS
英国著名的小众美容品牌网站:Alyaka
2017/08/08 全球购物
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
英国国家美术馆商店:National Gallery
2019/05/01 全球购物
急诊科护士自我鉴定
2013/10/14 职场文书
应届毕业生如何写求职信
2014/02/16 职场文书
《可爱的动物》教学反思
2014/02/22 职场文书
教师民族团结演讲稿
2014/08/27 职场文书
年终工作总结范文2014
2014/11/27 职场文书
学校运动会简讯
2015/07/20 职场文书