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对象链式操作代码(jquery)
Jul 04 Javascript
jquery控制左右箭头滚动图片列表的实例
May 20 Javascript
Node调试工具JSHint的安装及配置教程
May 27 Javascript
详谈LABJS按需动态加载js文件
May 07 Javascript
JQuery给网页更换皮肤的方法
May 30 Javascript
基于jquery实现的鼠标悬停提示案例
Dec 11 Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
Jun 13 Javascript
webuploader分片上传的实现代码(前后端分离)
Sep 10 Javascript
JavaScript键盘事件常见用法实例分析
Jan 03 Javascript
JavaScript类型相关的常用操作总结
Feb 14 Javascript
基于vue 动态菜单 刷新空白问题的解决
Aug 06 Javascript
JavaScript实现消消乐的源代码
Jan 12 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
一个没有MYSQL数据库支持的简易留言本的编写
2006/10/09 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
浅谈PDO的rowCount函数
2015/06/18 PHP
php ajax异步读取rss文档数据
2016/03/29 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
php使用fullcalendar日历插件详解
2019/03/06 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
jQuery版Tab标签切换
2011/03/16 Javascript
JQuery循环滚动图片代码
2011/12/08 Javascript
网页中可关闭的漂浮窗口实现可自行调节
2013/08/20 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
2016/01/08 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
2016/02/21 Javascript
jquery点击改变class并toggle的实现代码
2016/05/15 Javascript
浅谈es6中export和export default的作用及区别
2018/02/07 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
2018/09/27 Javascript
vue项目动态设置页面title及是否缓存页面的问题
2018/11/08 Javascript
微信小程序调用后台service教程详解
2020/11/06 Javascript
Python常用小技巧总结
2015/06/01 Python
Python实现的基数排序算法原理与用法实例分析
2017/11/23 Python
python 中字典嵌套列表的方法
2018/07/03 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
python读取图片的几种方式及图像宽和高的存储顺序
2020/02/11 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
python3用urllib抓取贴吧邮箱和QQ实例
2020/03/10 Python
幼教个人求职信范文
2013/12/02 职场文书
大学生收银员求职信分享
2014/01/02 职场文书
职业规划书如何设计?
2014/01/09 职场文书
高一政治教学反思
2014/01/28 职场文书
劳动之星获奖感言
2014/02/01 职场文书
揭牌仪式策划方案
2014/05/28 职场文书
国际商务英语专业求职信
2014/07/08 职场文书
社区节水倡议书
2015/04/29 职场文书
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
2021/07/07 Servers
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android