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连接access数据库的方法
Nov 17 Javascript
在IE下:float属性会影响offsetTop的取值
Dec 22 Javascript
JavaScript toFixed() 方法
Apr 15 Javascript
Jquery给基本控件的取值、赋值示例
May 23 Javascript
JavaScript获取DOM元素的11种方法总结
Apr 25 Javascript
分享Javascript实用方法二
Dec 13 Javascript
JavaScript暂停和继续定时器的实现方法
Jul 18 Javascript
浅谈JavaScript的函数及作用域
Dec 30 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
Dec 16 Javascript
使用Node.js写一个代码生成器的方法步骤
May 10 Javascript
js实现图片无缝循环轮播
Oct 28 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
Jul 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
使用字符串函数输出整数化的PHP版本号
2006/10/09 PHP
header中Content-Disposition的作用与使用方法
2012/06/13 PHP
基于php验证码函数的使用示例
2013/05/03 PHP
PHP获取当前日期和时间及格式化方法参数
2015/05/11 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
2016/02/26 PHP
PHP AjaxForm提交图片上传并显示图片源码
2016/11/29 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
2017/01/30 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
2017/05/05 PHP
PHP实现函数内修改外部变量值的方法示例
2018/12/28 PHP
使用jQuery的ajax功能实现的RSS Reader 代码
2009/09/03 Javascript
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
JavaScript动态加载样式表的方法
2015/03/21 Javascript
jQuery Real Person验证码插件防止表单自动提交
2015/11/06 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
nodejs爬虫遇到的乱码问题汇总
2017/04/07 NodeJs
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
2017/06/05 Javascript
JavaScript实现求最大公共子串的方法
2018/02/03 Javascript
json字符串传到前台input的方法
2018/08/06 Javascript
vue分页器组件编写方法详解
2019/06/28 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
python实现对输入的密文加密
2019/03/20 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
CSS3 3D位移translate效果实例介绍
2016/05/03 HTML / CSS
蛋白质世界:Protein World
2017/11/23 全球购物
学年自我鉴定范文
2013/10/01 职场文书
节约电力资源的建议书
2014/03/12 职场文书
2014年学校工作总结
2014/11/20 职场文书
如何计划开一家便利店?
2019/07/31 职场文书
css3实现背景图片半透明内容不透明的方法示例
2021/04/13 HTML / CSS
python实现自定义日志的具体方法
2021/05/28 Python
Win11如何修改dns?Win11修改dns图文教程
2022/01/18 数码科技