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 相关文章推荐
网页常用特效代码整理
Jun 23 Javascript
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
Jun 02 Javascript
Javascript实现页面跳转的几种方式分享
Oct 26 Javascript
AngularJS中的模块详解
Jan 29 Javascript
纯CSS3代码实现滑动开关效果
Aug 19 Javascript
jquery实现简单的banner轮播效果【实例】
Mar 30 Javascript
解析jQueryEasyUI的使用
Nov 22 Javascript
JS中使用 after 伪类清除浮动实例
Mar 01 Javascript
JavaScript异步上传图片文件的实例代码
Jul 04 Javascript
element-ui表格列金额显示两位小数的方法
Aug 24 Javascript
深入理解vue中的slot与slot-scope
Apr 22 Javascript
echarts实现折线图的拖拽效果
Dec 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
人大复印资料处理程序_查询篇
2006/10/09 PHP
用PHP+java实现自动新闻滚动窗口
2006/10/09 PHP
php中文字母数字验证码实现代码
2008/04/25 PHP
轻松修复Discuz!数据库
2008/05/03 PHP
PHP代码保护--Zend Guard的使用详解
2013/06/03 PHP
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
2016/05/06 PHP
PHP开发实现微信退款功能示例
2017/11/25 PHP
date.parse在IE和FF中的区别
2010/07/29 Javascript
使用jQuery validate 验证注册表单实例演示
2013/03/25 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
轻松创建nodejs服务器(10):处理上传图片
2014/12/18 NodeJs
常用的jQuery前端技巧收集
2014/12/24 Javascript
JavaScript中Cookie操作实例
2015/01/09 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
jquery组件WebUploader文件上传用法详解
2020/10/23 Javascript
Vuex之理解Getters的用法实例
2017/04/19 Javascript
vue axios整合使用全攻略
2018/05/24 Javascript
详解基于vue的服务端渲染框架NUXT
2018/06/20 Javascript
[09:13]2014DOTA2国际邀请赛 中国区预选赛coser表演
2014/05/23 DOTA
Python获取文件ssdeep值的方法
2014/10/05 Python
python使用pymysql实现操作mysql
2016/09/13 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
Windows下安装Django框架的方法简明教程
2018/03/28 Python
python爬取足球直播吧五大联赛积分榜
2018/06/13 Python
python如何保证输入键入数字的方法
2019/08/23 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
2020/03/01 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
锐步美国官方网站:Reebok美国
2018/01/10 全球购物
德国圣伯纳德草药屋:Kräuterhaus Sanct Bernhard(有中文站)
2018/08/05 全球购物
西铁城美国官方网站:Citizen Watch美国
2019/11/08 全球购物
如何开发一个JQuery插件
2016/07/28 面试题
卫校毕业生个人自我鉴定
2014/04/28 职场文书
新郎婚礼致辞
2015/07/27 职场文书