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 相关文章推荐
document.documentElement和document.body区别介绍
Sep 16 Javascript
node.js中的events.EventEmitter.listenerCount方法使用说明
Dec 08 Javascript
在浏览器中打开或关闭JavaScript的方法
Jun 03 Javascript
jQuery增加与删除table列的方法
Mar 01 Javascript
js实现人民币大写金额形式转换
Apr 27 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
Jul 20 Javascript
Bootstrap下拉菜单Dropdowns的实现代码
Mar 17 Javascript
使用InstantClick.js让页面提前加载200ms
Sep 12 Javascript
vue自动化表单实例分析
May 06 Javascript
微信小程序实现登录遮罩效果
Nov 01 Javascript
jquery 插件重新绑定的处理方法分析
Nov 23 jQuery
原生js实现照片墙效果
Oct 13 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动态创建Flash动画
2006/10/09 PHP
PHP UTF8编码内的繁简转换类
2009/07/20 PHP
php版银联支付接口开发简明教程
2016/10/14 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
Javascript下的keyCode键码值表
2007/04/10 Javascript
jquery.post用法示例代码
2014/01/03 Javascript
js获取页面传来参数的方法
2014/09/06 Javascript
js中iframe调用父页面的方法
2014/10/30 Javascript
浅谈键盘上回车按钮的js触发事件
2017/02/13 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
javascript过滤数组重复元素的实现方法
2017/05/03 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
Node.js之删除文件夹(含递归删除)代码实例
2019/09/09 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
2020/04/27 Javascript
原生JavaScript实现购物车
2021/01/10 Javascript
python练习程序批量修改文件名
2014/01/16 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
Python pandas库中的isnull()详解
2019/12/26 Python
Python3如何在Windows和Linux上打包
2020/02/25 Python
解决python调用自己文件函数/执行函数找不到包问题
2020/06/01 Python
Python2.x与3​​.x版本有哪些区别
2020/07/09 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
2019年c语言经典面试题目
2016/08/17 面试题
二手房买卖协议书
2014/04/10 职场文书
关于感恩的演讲稿500字
2014/08/26 职场文书
大学生职业生涯规划大赛作品(精品)
2014/09/17 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
服务员岗位职责范本
2015/04/09 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
超级详细实用的pycharm常用快捷键
2021/05/12 Python
js 数组 fill() 填充方法
2021/11/02 Javascript
使用python绘制分组对比柱状图
2022/04/21 Python