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 相关文章推荐
javascript之函数直接量(function(){})()
Jun 29 Javascript
JavaScript获取XML数据附示例截图
Mar 05 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
Sep 17 Javascript
理解JavaScript中Promise的使用
Jan 18 Javascript
JS实现的适合做faq或menu滑动效果示例
Nov 17 Javascript
使用node.js中的Buffer类处理二进制数据的方法
Nov 26 Javascript
老生常谈jquery中detach()和remove()的区别
Mar 02 Javascript
Vue集成Iframe页面的方法示例
Dec 12 Javascript
angularJS的radio实现单项二选一的使用方法
Feb 28 Javascript
微信小程序实现炫酷的弹出式菜单特效
Jan 28 Javascript
javascript实现手动点赞效果
Apr 09 Javascript
Vue向后台传数组数据,springboot接收vue传的数组数据实例
Nov 12 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
Adodb的十个实例(清晰版)
2006/12/31 PHP
PHP UTF8中文字符截断函数代码
2012/09/11 PHP
基于PHP的加载类操作以及其他两种魔术方法的应用实例
2017/08/28 PHP
详解如何实现Laravel的服务容器的方法示例
2019/04/15 PHP
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
XENON基于JSON变种
2010/07/27 Javascript
JavaScript 选中文字并响应获取的实现代码
2011/08/28 Javascript
40款非常有用的 jQuery 插件推荐(系列一)
2011/12/21 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
统计jQuery中各字符串出现次数的工具
2012/05/03 Javascript
jquery miniui 教程 表格控件 合并单元格应用
2012/11/25 Javascript
JS HTML5 音乐天气播放器(Ajax获取天气信息)
2013/05/26 Javascript
js数组的五种迭代方法及两种归并方法(推荐)
2016/06/14 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
微信小程序实现顶部选项卡(swiper)
2020/06/19 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
OpenLayers实现图层切换控件
2020/09/25 Javascript
Python实现抓取城市的PM2.5浓度和排名
2015/03/19 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
python读取Excel实例详解
2018/08/17 Python
Django 路由控制的实现代码
2018/11/08 Python
Pycharm 实现下一个文件引用另外一个文件的方法
2019/01/17 Python
对django的User模型和四种扩展/重写方法小结
2019/08/17 Python
Python执行时间的几种计算方法
2020/07/31 Python
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
不同浏览器创建XMLHttpRequest方法有什么不同
2014/11/17 面试题
农民工工资发放承诺书
2014/03/31 职场文书
搞笑爱情保证书
2014/04/29 职场文书
说明书格式及范文
2014/05/07 职场文书
儿童生日会策划方案
2014/05/15 职场文书
学生考试舞弊检讨书
2015/01/01 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书
领导欢送会主持词
2015/07/06 职场文书
高中历史教学反思
2016/02/19 职场文书
C站最全Python标准库总结,你想要的都在这里
2021/07/03 Python