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 相关文章推荐
js运动框架_包括图片的淡入淡出效果
May 11 Javascript
js onload事件不起作用示例分析
Oct 09 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
Mar 12 Javascript
javascript将异步校验表单改写为同步表单
Jan 27 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
May 14 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
Aug 04 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
May 03 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
May 20 Javascript
Angularjs实现下拉框联动的示例代码
Aug 22 Javascript
详解React之key的使用和实践
Sep 29 Javascript
JS module的导出和导入的实现代码
Feb 25 Javascript
原生js+canvas实现贪吃蛇效果
Aug 02 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+ajax 无刷新删除数据
2010/02/20 PHP
JavaScript创建命名空间的5种写法
2014/06/24 PHP
php如何利用pecl安装mongodb扩展详解
2019/01/09 PHP
HTML5附件拖拽上传drop & google.gears实现代码
2011/04/28 Javascript
javascript白色简洁计算器
2015/05/04 Javascript
JavaScript中的splice()方法使用详解
2015/06/09 Javascript
JavaScript实现获得所有兄弟节点的方法
2015/07/23 Javascript
Javascript中的getter和setter初识
2017/08/17 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
基于vue监听滚动事件实现锚点链接平滑滚动的方法
2018/01/17 Javascript
js构建二叉树进行数值数组的去重与优化详解
2018/03/26 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
详解利用eventemitter2实现Vue组件通信
2019/11/04 Javascript
vue相同路由跳转强制刷新该路由组件操作
2020/08/05 Javascript
[34:56]Ti4冒泡赛LGD vs Liquid 1
2014/07/14 DOTA
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:EE凭借法力虚空拿下4杀
2017/03/30 DOTA
python通过函数属性实现全局变量的方法
2015/05/16 Python
numpy中的高维数组转置实例
2018/04/17 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
2018/08/02 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
Python学习笔记之Break和Continue用法分析
2019/08/14 Python
Python实现获取当前目录下文件名代码详解
2020/03/10 Python
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
搞笑获奖感言
2014/01/30 职场文书
遗嘱继承公证书
2014/04/09 职场文书
公司捐款倡议书
2014/05/14 职场文书
投标授权委托书范文
2014/08/02 职场文书
研究生导师评语
2014/12/31 职场文书
导游欢迎词范文
2015/01/23 职场文书
公司总经理岗位职责
2015/04/01 职场文书
放假通知格式
2015/04/14 职场文书
2016应届大学生自荐信模板
2016/01/28 职场文书
SpringBoot整合RabbitMQ的5种模式实战
2021/08/02 Java/Android
python+pytest接口自动化之token关联登录的实现
2022/04/06 Python
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers
SpringBoot深入分析讲解监听器模式下
2022/07/15 Java/Android