Ajax请求Session超时问题
来源:互联网 发布:中国中车株洲所知乎 编辑:程序博客网 时间:2024/06/05 21:15
我在做项目时有时会遇到session超时问题,如果session超时,平常请求没有什么问题,通过拦截器可以正确跳到登陆页面,可是你如果用ajax请求的话这就出现问题了,因为ajax是异步的,局部刷新,所以登陆界面不会再全页面中显示,他只会显示到页面的一部分当中。所以根据我这几年的经验找到了我认为比较好的一种方法。因为那我用的框架是和struts2集成的,所以就在拦截器中进行设置:
首先判断session是否为空就是判断session是否超时,如果超时就取出请求的head头信息request.getHeader("x-requested-with"),如果不为空就和XMLHttpRequest(Ajax标识)进行比较
(request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest"))) 如果相等说明此请求是ajax请求。
如果是ajax请求就可以用response.setHeader("键","值")来设置一个标识来告诉用户这是ajax请求并且session超时时发出的,这样我就可以在回调函数中取出自己设置的那个唯一标识:XMLHttpRequest.getResponseHeader("");如果取出的值是和自己在后台中设置的值一样的话,就证明session已经超时,这样就可以设置window.location.replace("登陆界面"),来跳转到登陆界面了。
这样做虽然解决了问题,但是,会在每个回调函数中写入那些代码,这样的话代码就会显得特别零散,所以就想能不能定义一个全局的设置所以就找到了jqery的ajaxSetUp方法,通过ajaxSetUp对jqery的ajax进行全局的判断(ajaxSetUp就相当于ajax的拦截器),通过设置ajaxSetUp里的complete,它就相当于回调函数,这样那就弥补了上一方法的不足。
我做项目时还用到$(document).ajaxStart(),这是ajax请求时的事件;$(document).ajaxSuccess(),这是AJAX请求成功后的事件。我一般用他们来显示遮罩层和隐藏遮罩层用的加遮罩层是为了不让用户重复提交,更提高了用户体验度,让用户知道已经提交了。
希望我的解决方案对你们有帮助!
- Ajax请求Session超时问题
- Ajax请求Session超时问题
- session超时,处理ajax请求
- session超时,处理ajax请求
- session 超时,处理ajax请求
- ajax请求session 超时处理
- Ajax请求处理Session超时
- session超时,处理ajax请求
- Ajax请求session超时解决办法
- Ajax请求超时问题
- Ajax请求session超时处理流程
- Session超时后,Ajax请求处理方式
- 当Ajax请求遇到Session超时
- Ajax请求Session超时的处理
- 当Ajax请求遇到Session超时
- ajax异步请求,session超时处理
- ajax异步请求,session超时处理
- Session超时或无效,处理ajax请求
- 基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构---权限管理系统
- xshell无法远程连接阿里云
- Just Begin A New Life
- 处理时间的工具类
- 使用spring实现读写分离(mysql主从复制)三:使用spring实现读写分离
- Ajax请求Session超时问题
- python str转bool方法
- 救援模式和单用户模式和克隆虚拟机及Linux互相登录
- 提升解决问题的能力:学会提问,就解决了一半
- 有人说程序员到30就秃顶,那软件工程师呢?
- 【Pig】ubuntu下pig-0.17.0的安装和基本安装使用
- 非替换元素和替换元素
- rabbitmq启动时候卡在创建连接的地方
- 现代操作系统——内存管理之学习思路