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 相关文章推荐
JSON为什么那样红为什么要用json(另有洞天)
Dec 26 Javascript
22点关于jquery性能优化的建议
May 28 Javascript
window.print打印指定div指定网页指定区域的方法
Aug 04 Javascript
js日期插件dateHelp获取本月、三个月、今年的日期
Mar 07 Javascript
JS锚点的设置与使用方法
Sep 05 Javascript
详解react如何在组件中获取路由参数
Jun 15 Javascript
JS SetInterval 代码实现页面轮询
Aug 11 Javascript
详解react使用react-bootstrap当轮子造车
Aug 15 Javascript
Vue.js 使用v-cloak后仍显示变量的解决方法
Nov 19 Javascript
灵活使用console让js调试更简单的方法步骤
Apr 23 Javascript
JavaScript简单编程实例学习
Feb 14 Javascript
vue 使用class创建和清除水印的示例代码
Dec 25 Vue.js
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 高手之路(一)
2006/10/09 PHP
php使用curl实现ftp文件下载功能
2017/05/16 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
jQuery获取checkbox选中的值
2016/01/28 Javascript
两种方法解决javascript url post 特殊字符转义 + & #
2016/04/13 Javascript
详解vue slot插槽的使用方法
2017/06/13 Javascript
详解webpack 多页面/入口支持&公共组件单独打包
2017/06/29 Javascript
vue脚手架及vue-router基本使用
2018/04/09 Javascript
jQuery/JS监听input输入框值变化实例
2019/10/17 jQuery
如何检测JavaScript中的死循环示例详解
2020/08/30 Javascript
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
python调用java的Webservice示例
2014/03/10 Python
python中尾递归用法实例详解
2015/04/28 Python
解决win64 Python下安装PIL出错问题(图解)
2018/09/03 Python
django框架CSRF防护原理与用法分析
2019/07/22 Python
python 项目目录结构设置
2020/02/14 Python
Python使用Numpy模块读取文件并绘制图片
2020/05/13 Python
浅谈Python中的模块
2020/06/10 Python
Python配置pip国内镜像源的实现
2020/08/20 Python
matplotlib交互式数据光标实现(mplcursors)
2021/01/13 Python
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
理工大学毕业生自荐信
2013/11/01 职场文书
教师自荐信范文
2013/12/09 职场文书
装修致歉信
2014/01/15 职场文书
美国探亲签证邀请信
2014/02/05 职场文书
补充协议书范本
2014/04/23 职场文书
增员口号大全
2014/06/18 职场文书
关于读书的演讲稿800字
2014/08/27 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
预备党员思想汇报1000字
2014/10/07 职场文书
中学感恩教育活动总结
2015/05/05 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书
2019企业文化管理制度范本!
2019/08/06 职场文书
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技