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之对系统的toFixed()方法的修正
May 08 Javascript
js实现文本框中焦点在最后位置
Mar 04 Javascript
javascript数组操作方法小结和3个属性详细介绍
Jul 05 Javascript
AngularJS 实现JavaScript 动画效果详解
Sep 08 Javascript
js中scrollTop()方法和scroll()方法用法示例
Oct 03 Javascript
AngularJS自定义插件实现网站用户引导功能示例
Nov 07 Javascript
JS中正则表达式全局匹配模式 /g用法详解
Apr 01 Javascript
Vue自定义事件(详解)
Aug 19 Javascript
微信小程序实现流程进度的图样式功能
Jan 16 Javascript
基于Vue的ajax公共方法(详解)
Jan 20 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
Feb 24 Javascript
Vue CLI3基础学习之pages构建多页应用
Jun 02 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
咖啡磨器 如何选购一台适合家用的意式磨豆机
2021/03/05 新手入门
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
PHP SESSION的增加、删除、修改、查看操作
2015/03/20 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
js 页面输出值
2008/11/30 Javascript
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
用Juery网页选项卡实现代码
2011/06/13 Javascript
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题
2013/01/11 Javascript
jQuery 获取URL的GET参数值的小例子
2013/04/18 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
javascript RegExp 使用说明
2016/05/21 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
2017/05/08 jQuery
React学习笔记之条件渲染(一)
2017/07/02 Javascript
AngularJS自定义表单验证功能实例详解
2018/08/24 Javascript
浅谈angularJS2中的界面跳转方法
2018/08/31 Javascript
jquery树形插件zTree高级使用详解
2019/08/16 jQuery
详解利用eventemitter2实现Vue组件通信
2019/11/04 Javascript
vue视频播放暂停代码
2019/11/08 Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
2020/11/27 Vue.js
JavaScript 获取滚动条位置并将页面滑动到锚点
2021/02/08 Javascript
python3 实现对图片进行局部切割的方法
2018/12/05 Python
Python爬虫设置代理IP(图文)
2018/12/23 Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
2019/08/19 Python
Python3.x+pyqtgraph实现数据可视化教程
2020/03/14 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
python利用递归方法实现求集合的幂集
2020/09/07 Python
python Paramiko使用示例
2020/09/21 Python
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
圣彼得堡鲜花配送:Semicvetic
2020/09/15 全球购物
应届大学生简历中的自我评价
2014/01/15 职场文书
颐和园导游词
2015/01/30 职场文书
推销搭讪开场白
2015/05/28 职场文书
2019年自助餐厅创业计划书模板
2019/08/22 职场文书
聊聊配置 Nginx 访问与错误日志的问题
2022/05/25 Servers