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 相关文章推荐
自动更新作用
Oct 08 Javascript
document.designMode的功能与使用方法介绍
Nov 22 Javascript
JQuery与Ajax常用代码实现对比
Oct 03 Javascript
分享几个超级震憾的图片特效
Jan 08 Javascript
js 关键词高亮(根据ID/tag高亮关键字)案例介绍
Jan 21 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
May 30 Javascript
JS的事件绑定深入认识
Jun 26 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
Nov 03 Javascript
js针对ip地址、子网掩码、网关的逻辑性判断
Jan 06 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
Jan 23 Javascript
Vue封装Swiper实现图片轮播效果
Feb 06 Javascript
JavaScript字符和ASCII实现互相转换
Jun 03 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判断指定时间段的2个方法
2014/03/14 PHP
使用XHGui来测试PHP性能的教程
2015/07/03 PHP
PHP实现的回溯算法示例
2017/08/15 PHP
PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
2018/05/11 PHP
Yii 框架使用数据库(databases)的方法示例
2020/05/19 PHP
让Firefox支持event对象实现代码
2009/11/07 Javascript
jquery和js实现对div的隐藏和显示方法
2014/09/26 Javascript
jQuery替换textarea中换行的方法
2015/06/10 Javascript
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
2015/09/19 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
JS实现间歇滚动的运动效果实例
2016/12/22 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
2016/12/23 Javascript
JS实现图片放大缩小的方法
2017/02/15 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
微信小程序自定义toast组件的方法详解【含动画】
2019/05/11 Javascript
three.js着色器材质的内置变量示例详解
2020/08/16 Javascript
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
浅谈scrapy 的基本命令介绍
2017/06/13 Python
详解django中自定义标签和过滤器
2017/07/03 Python
如何在python中使用selenium的示例
2017/12/26 Python
Python Web编程之WSGI协议简介
2018/07/18 Python
django的ORM操作 增加和查询
2019/07/26 Python
Tensorflow的常用矩阵生成方式
2020/01/04 Python
个人求职信范文分享
2014/01/31 职场文书
优秀实习生感言
2014/03/01 职场文书
四风对照检查材料范文
2014/09/27 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
2014年大学团支部工作总结
2014/12/02 职场文书
2015最新民情日记范文
2015/06/26 职场文书
班级联欢会主持词
2015/07/03 职场文书
Java字符缓冲流BufferedWriter
2022/04/09 Java/Android
在python中读取和写入CSV文件详情
2022/06/28 Python