`
圣诞王子
  • 浏览: 84569 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

ajax遇到session失效处理

 
阅读更多

最近由于一个项目,模块切换为ajax请求数据,当Session失效后,ajax请求后没有返回值,这时候应该要求系统重新登录才可以。

现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Ajax请求遇到Session超时,应该怎么办?

显而易见,传统的页面跳转在此已经不适用,因为Ajax请求是XMLHTTPRequest对象发起的而不是浏览器,在验证失败后的页面跳转无法反应到浏览器中,因为服务器返回(或输出)的信息被JavaScript(XMLHTTPRequest对象)接到了。

那么应该怎么处理这种情况呢?

 

解决方法:

既然服务器返回的消息被XMLHTTPRequest对象接收,而XMLHTTPRequest对象又是在JavaScript的掌控之中,那么我们是否可以利用JavaScript来完成页面跳转呢?

当然可以,而且很容易实现!但有一点,我们需要判断一下HTTP请求是否为Ajax请求(因为AJAX请求和普通的请求需要分开处理),这又如何判断呢?其实Ajax请求和普通的HTTP请求是不同的,这体现在HTTP请求的头信息中,如下所示:

上面两张图片是用火狐的Firebug截取的,前者是普通的HTTP请求头信息;后者为Ajax请求的请求头信息。注意第一图片被红框圈起来的部分,这就是Ajax请求与普通请求不同的地方,AJAX请求头中带有X-Requested-With信息,其值为XMLHttpRequest,这正是我们可以利用的地方。

 

所以.......

 

第一步,在spring拦截器中做好请求session处理

String requestType = request.getHeader("X-Requested-With");
        
        //判断是否登录,未登录返回登录页面
        if(!SessionUtil.adminOnLogin(request)){
        	if(StringUtil.isNotEmpty(requestType) && requestType.equalsIgnoreCase("XMLHttpRequest")){
        		//session失效的时候,在返回里面自定义一个变量,以便在ajax请求的时候做处理 
        		response.setHeader("sessionstatus", "timeout");
        		response.sendError(403, "session timeout.");
        		//response.sendError(, "session timeout."); 
        	}else{
        		response.sendRedirect(request.getContextPath()+"/manager/admin/login");
        	}
        	return false;
        }else{
        	return true;
        }

 

 

第二步,重写ajax请求

var isTip = false;//防止一个页面多个ajax请求,重复跳出弹框
jQuery(function($){  
    // 备份jquery的ajax方法    
    var _ajax=$.ajax;  
    // 重写ajax方法,先判断登录在执行success函数   
    $.ajax=function(opt){  
        var _complete = opt && opt.complete || function(a, b){};  
        var _error = opt && opt.error || function(a, b){};  
        
        var _opt = $.extend(opt, {  
        	complete: function(xhr,status){ 
		  		 _complete(xhr,status);  
            } ,  
        	error: function(xhr,status){ 
		  		 //通过XMLHttpRequest取得响应头,sessionstatus           
		         var sessionstatus=xhr.getResponseHeader("sessionstatus"); 
		  		 if(sessionstatus == 'timeout'){//
		  			 if(isTip == false){
		  				alert("由于你长时间没有操作,需要重新登录!");
			  			window.location.href = "${pageContext.request.contextPath}/manager/admin/login";
			  			isTip = true;
		  			 }
		  		 }else{
		  		 }
		  		_error(xhr,status);  
        	}    
        });  
        _ajax(_opt);  
    };  
});

 

后面在在页面中正常使用ajax就会自动判断session是否已经失效,并在失效的时候自动的跳转到登录页面。

分享到:
评论

相关推荐

    完美解决ajax访问遇到Session失效的问题

    最近由于一个项目,模块切换为ajax请求数据,当Session失效后,ajax请求后没有返回值,只有响应的html:<html>[removed]window.open(‘http://192.168.0.118:8080/welcomeAction/loginUI.do’,’_top’);...

    Ajax请求session失效该如何解决

    但针对Ajax请求,由于其异步性质,处理Session失效的方式略有不同。 标题和描述中提到的问题在于,Ajax请求可能不会像普通HTTP请求那样经过完整的过滤器链,因此需要特别处理。以下是如何解决Ajax请求时Session失效...

    ext session失效 页面跳转

    当Session失效时,通常会导致用户被重定向到登录页面,以便重新验证其身份。下面将详细讨论EXT Session失效以及如何实现页面跳转至登录页。 首先,EXT是一个JavaScript库,用于构建交互式的、数据驱动的Web应用。它...

    ajax请求Session失效问题

    然而,当涉及到用户会话(Session)管理时,AJAX请求可能会引发一些特殊的问题,特别是当Session失效时。本文将深入探讨这个主题,并提供解决方案。 Session是Web应用中用于跟踪用户状态的一种机制。它存储在服务器...

    Ajax Session失效跳转登录页面的方法

    然而,在使用Ajax技术进行异步请求时,会遇到一个问题,即如何在Session失效的情况下处理请求并跳转到登录页面。本文主要针对该问题提供了详细的解决方案,并以Struts2框架为例,讲解了如何通过拦截器来实现这一功能...

    使用Ajax时处理用户session失效问题的解决方法

    总结来说,处理Ajax请求中的用户session失效问题,需要在后端识别Ajax请求并返回特定的响应头,然后在前端监听并处理这些响应,以便在session过期时提示用户重新登录。通过这种方式,我们可以确保无论用户如何与页面...

    在线人员 ajax聊天室 关闭浏览器和登出控制使session失效

    【关闭浏览器和登出控制使session失效】是Web应用中常见的用户会话管理策略。Session是服务器端用来跟踪用户状态的一种方式,当用户登录后,服务器会创建一个session,并将用户信息存储在其中。当用户关闭浏览器或...

    ajax 操作全局监测,用户session失效的解决方法

    解决AJAX操作中session失效的方法通常涉及全局监测和处理session失效逻辑。文章中提供的代码示例展示了如何在全局范围内重写jQuery的ajax方法,增加对session状态的检查,并在检测到session失效时进行特定的处理。...

    详解.net mvc session失效问题

    总的来说,处理.NET MVC中的Session失效问题需要关注请求类型,区分Ajax和非Ajax请求,以及认证状态。通过自定义授权过滤器和调整客户端代码,我们可以确保用户在Session失效时被引导至登录页面,从而维护应用的安全...

    extjs session失效解决方案

    使用filter来做后台,Ext.Ajax.on('requestcomplete', checkUserSessionStatus, this);用requestcomplete这个方法来异步判断session是否已经失效了

    express如何解决ajax跨域访问session失效问题详解

    本文将详细探讨如何解决Express中ajax跨域访问时session失效的问题。 首先,我们需要理解为何在跨域请求中session会失效。在HTTP协议中,由于同源策略的限制,浏览器不会在跨域请求中发送cookies,而session通常是...

    详解php设置session(过期、失效、有效期)

    本篇文章将深入探讨如何在PHP中设置Session,包括过期、失效以及有效期的管理。 首先,让我们关注`session.save_path`配置。在`php.ini`文件中,这一项用于指定Session数据的存储路径。`N;/path`这里的`N`表示目录...

    session 超时

    知识点二:session失效处理方式 在传统和基于AJAX的web应用中,对session失效的处理方式有所不同。文章讨论了两种不同的web应用中对session失效的不同处理方式,其中重点在exos的背景下阐述了在基于AJAX的web应用中...

    iframe跨域与session失效问题的解决办法

    何为跨域跨域session/cookie? 也就是第三方session/cookie。第一方session/cookie指的是访客当前访问的网站给访客的浏览器设置的seesion /cookie, 会被存储在访客的计算机上。第三方session/cookie指的是当前访问的...

Global site tag (gtag.js) - Google Analytics