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验证用户输入URL地址是否为空及格式是否正确
Oct 09 Javascript
JavaScript自定义数组排序方法
Feb 12 Javascript
浅谈jQuery中replace()方法
May 13 Javascript
JS实现自动变化的导航菜单效果代码
Sep 09 Javascript
jquery中键盘事件小结
Feb 24 Javascript
JavaScript 链式结构序列化详解
Sep 30 Javascript
Angular.JS中的指令引用template与指令当做属性详解
Mar 30 Javascript
基于jQuery的$.getScript方法去加载javaScript文档解析
Nov 08 jQuery
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
Aug 08 Javascript
VUE安装使用教程详解
Jun 03 Javascript
解决React在安装antd之后出现的Can't resolve './locale'问题(推荐)
May 03 Javascript
2分钟实现一个Vue实时直播系统的示例代码
Jun 05 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实现分页工具类分享
2014/01/09 PHP
php+mysql实现简单的增删改查功能
2015/07/13 PHP
php实现的中文分词类完整实例
2017/02/06 PHP
PHP设计模式之适配器模式定义与用法详解
2018/04/03 PHP
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
JQuery球队选择实例
2015/05/18 Javascript
jquery小火箭返回顶部代码分享
2015/08/19 Javascript
JavaScript基础重点(必看)
2016/07/09 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
jquery实现网站列表切换效果的2种方法
2016/08/12 Javascript
canvas实现绘制吃豆鱼效果
2017/01/12 Javascript
原生js实现打字动画游戏
2017/02/04 Javascript
vue-cli如何快速构建vue项目
2017/04/26 Javascript
JS实现汉字与Unicode码相互转换的方法详解
2017/04/28 Javascript
BootStrap中Table隐藏后显示问题的实现代码
2017/08/31 Javascript
微信小程序实现选项卡功能
2020/06/19 Javascript
微信小程序实现日期格式化和倒计时
2020/11/01 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
[39:53]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.19
2020/11/19 DOTA
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
通过Python实现自动填写调查问卷
2017/09/06 Python
python素数筛选法浅析
2018/03/19 Python
Python返回数组/List长度的实例
2018/06/23 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
2020/04/14 Python
pytorch SENet实现案例
2020/06/24 Python
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
路政管理专业个人自荐信范文
2013/11/30 职场文书
财务会计毕业生个人求职信
2014/02/03 职场文书
小学数学教学经验交流材料
2014/05/22 职场文书
大学生找工作求职信
2014/07/09 职场文书
计划生育证明格式范本
2014/09/12 职场文书
自主招生学校推荐信
2014/09/26 职场文书
2016年教代会开幕词
2016/03/04 职场文书
nginx配置ssl实现https的方法示例
2021/03/31 Servers
为什么RedisCluster设计成16384个槽
2021/09/25 Redis