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 request函数 用来获取url参数
May 17 Javascript
使用JavaScript 实现对象 匀速/变速运动的方法
May 08 Javascript
JS 在指定数组中随机取出N个不重复的数据
Jun 10 Javascript
JavaScript函数使用的基本教程
Jun 04 Javascript
JS判断当前页面是否在微信浏览器打开的方法
Dec 08 Javascript
JavaScript截取、切割字符串的技巧
Jan 07 Javascript
js仿3366小游戏选字游戏
Apr 14 Javascript
微信小程序 video组件详解
Oct 25 Javascript
原生javascript上传图片带进度条【实例分享】
Apr 06 Javascript
JS判断数组里是否有重复元素的方法小结
May 21 Javascript
简单了解常用的JavaScript 库
Jul 16 Javascript
微信小程序APP页面的之间的相互传递参数以及自定义组件
Apr 19 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调用dll的实例操作动画与代码分享
2012/08/14 PHP
PHP类继承 extends使用介绍
2014/01/14 PHP
跨浏览器通用、可重用的选项卡tab切换js代码
2011/09/20 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
2014/03/12 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
jQuery中$(function() {});问题详解
2015/08/10 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
JavaScript中获取时间的函数集
2016/08/16 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
详解JS-- 浮点数运算处理
2016/11/28 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
微信小程序switch开关选择器使用详解
2018/01/31 Javascript
基于vue循环列表时点击跳转页面的方法
2018/08/31 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
Vue实现浏览器打印功能的代码
2020/04/17 Javascript
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
python实现提取百度搜索结果的方法
2015/05/19 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
python调用百度语音REST API
2018/08/30 Python
python 分离文件名和路径以及分离文件名和后缀的方法
2018/10/21 Python
Django中使用Whoosh进行全文检索的方法
2019/03/31 Python
详解Python爬取并下载《电影天堂》3千多部电影
2019/04/26 Python
python+selenium实现简历自动刷新的示例代码
2019/05/20 Python
python实现监控阿里云账户余额功能
2019/12/16 Python
Python ATM功能实现代码实例
2020/03/19 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
python实现批处理文件
2020/07/28 Python
表单button的outline在firefox浏览器下的问题
2012/12/24 HTML / CSS
土木工程师岗位职责
2013/11/24 职场文书
初中同学聚会感言
2014/02/11 职场文书
协议书怎么写
2014/04/21 职场文书
六一儿童节演讲稿
2014/05/23 职场文书
初三毕业感言
2015/07/31 职场文书
行为规范主题班会
2015/08/13 职场文书
python中pycryto实现数据加密
2022/04/29 Python