ajax保持会话,Ajax请求会话过期处理(JS)

当处理页面Session过期时,通常在过滤器中检查Session并重定向到登录页。但对于Ajax请求,这种方法无效,因为响应会被XMLHTTPRequest接收。解决办法是在服务器端响应头中设置标识,如Java过滤器中设置'SessionStatus',并在JavaScript中通过ajaxError事件检测该标识,从而处理Session过期并跳转到登录页。
摘要由CSDN通过智能技术生成

对于页面来说,处理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";

}

});

[JS] Ajax请求会话过期处理

对于页面来说,处理session过期比较简单,一般只需在过滤器里面判断session用户是否存在,不存在则跳转页面到登陆页即可. 对于Ajax请求来说,这个办法则无效,只能获取到登录页的html代码. ...

处理jquery的ajax请求session过期跳转到登录页面

首先需要在拦截器中判断是否是ajax请求,如果是 if(isAjaxRequest(request)){//ajax请求 response.setHeader("sessionstatus& ...

ajax请求,html调用js

1:html中调用js中的函数,js使用ajax请求向后台请求,返回数据.

Ajax 请求session过期的统一处理

public class LoginInterceptor extends HandlerInterceptorAdapter { @SuppressWarnings("unused&quo ...

浅析ajax请求json数据并用js解析(示例分析)

这应该是每个web开发的人员都应该掌握的基础技术,需要的朋友可以参考下 自从接触了jquery就喜欢上了前端开发,而且深深感受到了前端开发的强大与重要之处.同时也想为asp.net鸣不平,事实上asp ...

程序ajax请求公共组件-- app-jquery-http.js

$.HTTP = { getUrlParam : function (name) { var reg = new RegExp ("(^|&)" + name + &quo ...

程序ajax请求公共组件app-jquery-http.js中url参数部分的项目应用

结合微信登录以及微信支付的案例:= =||| (案例比较奇葩复杂) 简述项目流程: 1.获取用于公众号支付的openid(公众平台):在微信内置浏览器中打开网页链接,刚进入页面就通过微信公众平台获取该 ...

vue 发送ajax请求

一. 简介 1.vue本身不支持发送AJAX请求,需要使用vue-resource(vue1.0版本).axios(vue2.0版本)等插件实现 2.axios是一个基于Promise的HTTP请求客 ...

原生js发送ajax请求

堕落了一阵子了,今天打开博客,发现连登录的用户名和密码都不记得了.2016年已过半,不能再这么晃荡下去了. 参加了网易微专业-前端攻城狮 培训,目前进行到大作业开发阶段,感觉举步维艰.但是无论如何,不 ...

随机推荐

C#将一个excel工作表根据指定范围拆分为多个excel文件

C#将一个excel工作表根据指定范围拆分为多个excel文件 微软Excel没有提供直接的方法来拆分excel文件,因此要拆分一个excel文件最简单的方法可能就是手动剪切和粘贴了,除此之外,还有其 ...

DOJO DOM 功能

In this tutorial, you'll learn about how to use Dojo to manipulate the DOM in a simple, cross-browse ...

个人作业-Homework1感想

我以前没有系统学习过C++和C#,编程能力比较差.这次个人作业对我来说是一个很大的挑战.由于布置作业的时间是开学的第一周,因为还没有从假期的状态中转换出来,这对我写作业又增加了一定的难度. 在开始写作 ...

获取MP3和M4A音乐文件的歌曲信息以及专辑图片--备用

NSBundle* bundle = [NSBundle mainBundle];     NSString* path = [bundle bundlePath];     NSURL * file ...

ContentPlaceHolderID属性

用来对应包含与当前内容关联的 ContentPlaceHolder 的 ID啊 说白了就是去找母版页相应的ContentPlaceHolder ,然后把内容扔进那里面去

Ubuntu Server 重启 Apache Mysql

a. 重启 apache sudo service apache2 restart b. 重启 MySQL sudo service mysql restart

Web攻击技术

Web攻击技术 1.针对Web的攻击技术 1.1.在客户端即可篡改请求 在Web应用中,从浏览器那接收到的Http的全部内容,都可以在客户端自由地变更.篡改,所以Web应用可能会接收到与预期数据不相同 ...

XML Publisher Report Issues, Recommendations and Errors

In this Document   Purpose   Questions and Answers   References APPLIES TO: Oracle Process Manufactu ...

python第六章:三大利器(装饰器,迭代器,生成器)--小白博客

python装饰器 什么是装饰器?在不修改源代码和调用方式的基础上给其增加新的功能,多个装饰器可以装饰在同一个函数上 # 原理(个人理解):将原函数(bar)的内存地址重新赋值,进行覆盖.新值为装饰器 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值