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 相关文章推荐
Jquery选择器 $实现原理
Dec 02 Javascript
jQuery 1.4 15个你应该知道的新特性(译)
Jan 24 Javascript
用js模拟JQuery的show与hide动画函数代码
Sep 20 Javascript
用jquery写的菜单从左往右滑动出现
Apr 11 Javascript
Jquery实现$.fn.extend和$.extend函数
Apr 14 Javascript
微信小程序 navigation API实例详解
Oct 02 Javascript
微信小程序 UI布局常用技巧整理总结
Dec 05 Javascript
基于Vue实现后台系统权限控制的示例代码
Aug 29 Javascript
简述JS浏览器的三种弹窗
Jul 15 Javascript
深入浅析Node环境和浏览器的区别
Aug 14 Javascript
vue单页应用在页面刷新时保留状态数据的方法
Sep 21 Javascript
layui 表单标签的校验方法
Sep 04 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 和 XML: 使用expat函数(一)
2006/10/09 PHP
global.php
2006/12/09 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
开发插件的两个方法jquery.fn.extend与jquery.extend
2013/11/21 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
2015/12/16 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
获取JS中网页各种高宽与位置的方法总结
2016/07/27 Javascript
轻松掌握JavaScript中介者模式
2016/08/26 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
Javascript 调用 ActionScript 的简单方法
2016/09/22 Javascript
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
2017/12/13 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
2018/06/07 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
2018/12/11 Javascript
使用gulp构建前端自动化的方法示例
2018/12/25 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
2019/06/03 Javascript
el-input 标签中密码的显示和隐藏功能的实例代码
2019/07/19 Javascript
[02:12]Dota 2 推出全新英雄—— 电炎绝手
2019/08/23 DOTA
Python中的默认参数详解
2015/06/24 Python
Python数据类型学习笔记
2016/01/13 Python
Python win32com 操作Exce的l简单方法(必看)
2017/05/25 Python
python中实现数组和列表读取一列的方法
2018/04/03 Python
Python 使用PIL numpy 实现拼接图片的示例
2018/05/08 Python
浅析Python装饰器以及装饰器模式
2018/05/28 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
python进阶之自定义可迭代的类
2019/08/20 Python
pycharm修改file type方式
2019/11/19 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
中粮集团旗下食品网上购物网站:我买网
2016/09/22 全球购物
积极分子思想汇报
2014/01/04 职场文书
党的群众路线教育实践活动批评与自我批评发言稿
2014/10/16 职场文书
2014年学校党建工作总结
2014/11/11 职场文书
主持稿开场白
2015/06/01 职场文书
防溺水安全教育主题班会
2015/08/12 职场文书
运动会广播稿50字
2015/08/19 职场文书