`
tigerl
  • 浏览: 98661 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
我使用的Struts2.3.4,配置的LoginInterceptr拦截器,所有请求除了登录请求外都会先经过拦截器,在拦截器里获取Session信息,判断用户信息是否存在,因为如果Session超时,Session中的信息是会被清除掉的。

所以如果Session已超时,对于非Ajax请求,会直接重定向到登录页面,但是对于Ajax请求则不会,这里给出解决方案,经过测试,绝对可行!当然,如果谁有更好的方法请贴出来:

如果想要Ajax请求在当Session超时的时候也重定向,则需要服务端返回错误信息,在ajax回调函数中做判断,看了看Jquery文档,说是可以定义全局函数,但是不知道那玩意怎么用,试了半天都没试出来!所以只得用如下方法来发Ajax请求:
	function show_userList(){
		$.ajax({
			type: "GET",
  			url: "ms/user!userList.action?dd="+new Date().getTime(),
			success: function(msg){
				     $("#bd").html(msg);
					},
			complete:function(XMLHttpRequest,textStatus){ 
                 if(textStatus=="error"){
                  	var ll = "<%=basePath%>";
                  	alert("basePath : "+ll);
                    window.location=ll+"/login"; 
                 } 
             }
		});
	}


Jquery文档中如是说:complete 当请求完成之后调用这个函数,无论成功或失败。幸好有这么个可爱的回调函数!! 而$.get()、$.load()、$.post()方式的回调函数都是调用成功返回才会触发的回调函数,所以只能使用如上这种方式!

原理如下:
发送Ajax请求,无论成功或失败,都会调用complete回调函数,所以如果Sessio超时了,complete回调函数中的textStatus的值为===>>请注意红色部分error,值为error,则可以判断如果为error则使用window.location="你的登录首页"这种方式重定向浏览器。


就这么简单,根本不用什么在服务端写入HttpHeader任何信息,服务端不需要做任何处理,所需要做的仅仅是如上我给出的代码一样,再申明一次,绝对正确,我使用的jquery是1.7.2版本!其它版本没测试过!

如有疑问或者是更好的方式欢迎交流!

更正一点
由于缓存原因给我造成了错觉,在服务端struts的拦截器里response中加一个状态标识,类似如下,这是我的loginInterceptor
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		
		LoginInfoVO login = (LoginInfoVO)ServletActionContext.getRequest().getSession().getAttribute("login");

		//如果为空,则返回到登录页面
		if(login == null){
			ServletActionContext.getResponse().setStatus(HttpServletResponse.SC_FORBIDDEN);
			return "login";
		}
		
		//继续向下执行
		return invocation.invoke();
	}


ajax的textStatus经测试只有两种状态成功为“success”,失败为“error”;所以如果在response中设置http错误状态码就OK!

增加第二种方法:
在页面脚本使用Jquery中的Ajax全局函数ajaxError()方法,直接看代码:
$(document).ajaxError(function(){
			fnVerifySession(true);
		});

匿名函数里写自己的业务逻辑,fnVerifySession方法是我自己写的用来弹出一个层提示Session超时的。
使用全局函数的前提就是一定要使这3行代码是全局的,即每个页面都能访问到,建议写到外部js文件,然后在每个页面包含
对于服务端的处理依旧和上面一样,返回错误响应码
分享到:
评论
1 楼 shanghaiwobama 2012-09-02  
好,刚好我们做项目下一步也要用这个,,,,

相关推荐

    Web 开发中Ajax的Session 超时处理方法

    总结来说,处理Ajax请求中的Session超时问题,需要服务器端能够识别并标记超时的Ajax请求,同时客户端需要能够正确响应并处理这些标记。这样的设计既保持了用户体验的连续性,又确保了系统的安全性。在实际项目中,...

    Ajax请求session失效该如何解决

    以下是如何解决Ajax请求时Session失效的方案: 首先,我们需要在过滤器(Filter)中进行检测。过滤器是Java Servlet的一部分,可以拦截所有的HTTP请求。在`LoginFilter`类中,我们检查每个请求是否有有效的Session...

    重写 ajax 实现 session 超时跳转到登录页面实例代码

    这样,当Ajax请求因Session超时导致服务器返回302时,前端能够捕获到这个错误并自动跳转到登录页面,而不是让页面保持在原来的视图中,提供良好的用户体验。 总结来说,结合后端的Session过滤器和前端的Ajax重写,...

    ajax提交session超时跳转页面使用全局的方法来处理

    总结来说,处理AJAX请求时的Session超时问题,主要分为两步:一是服务器端检测并标记Session超时,二是客户端监听响应并根据标记进行页面跳转。这种方法可以确保无论用户何时何地发起AJAX请求,一旦Session超时,都...

    JSPsession超时提示

    ### JSP Session超时提示知识点解析 #### 一、背景介绍 在Web应用程序中,`session` 是一种常用的技术手段,用于保存用户的状态信息。它能够帮助开发者在多个页面请求之间保持用户的数据一致性。然而,为了提高安全...

    webix+springmvc session超时跳转登录页面

    解决这个问题的方法是,我们需要在Webix的Ajax请求处理中添加对Session超时的检测和响应。根据提供的内容,我们可以看到有以下步骤: 1. **分析Webix源码**:Webix的`webix.ajax`方法默认只有请求前的监听函数`...

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

    一旦Session超时或者被清除,服务器将不再识别该用户,导致用户需要重新登录。对于传统的HTTP请求,如果Session失效,服务器通常会返回一个重定向页面,引导用户重新登录。但对于Ajax请求,这种做法并不适用,因为...

    session过期问题

    **Session过期问题的常见场景及解决方案** 1. **用户长时间未操作**:设置合理的Session超时时间,同时考虑采用心跳检测来保持用户在线状态。 2. **用户浏览器关闭**:浏览器关闭后Session丢失,再次打开时应判断...

    ext session失效 页面跳转

    当客户端的浏览器关闭或者Session超时时,Session将被视为失效。 当EXT应用检测到Session失效,它需要与后端服务器进行通信,确认Session状态。这通常是通过Ajax请求完成的。如果后端返回的响应表明Session已过期,...

    Session过期后自动跳转到登录页面的实例代码

    如果Session已经过期,我们可以设置响应的状态,对于Ajax请求,可以设置超时状态;对于普通页面请求,可以返回一个提示信息,并重定向到登录页面。例如: ```java public class SessionFilter implements Filter { ...

    跨域共享session (实现http跳转https 共享session)

    3. **定期刷新session**:设置合理的session超时时间,并在用户活动时更新session的最后活跃时间,提高安全性。 综上所述,跨域共享session涉及到多个技术层面,包括浏览器限制、服务器配置、前端处理和安全措施。...

    JS Ajax请求会话过期处理问题解决方法分析

    然而,当用户长时间无操作或系统设定的会话超时后,Ajax请求可能会遇到会话过期的问题。本文将深入探讨这个问题,并提供相应的解决方案。 会话过期通常发生在用户打开网页后,一段时间没有与服务器交互,服务器为了...

    详解.net mvc session失效问题

    这样,无论返回的是JsonResult还是PartialViewResult,我们都可以在客户端统一处理Session超时的情况,避免对每个Ajax请求单独编写处理代码。 总的来说,处理.NET MVC中的Session失效问题需要关注请求类型,区分...

    界面 ext 4.1 mvc框架 动态加载控制层 后台session 过期处理

    在全局的Ajax配置中监听`requestcomplete`事件,检查返回的响应,如果发现session超时,则弹出提示并重定向到登录页面: ```javascript // 在app中设置Ajax回调处理函数 Ext.Ajax.on('requestcomplete', ...

    登录超时给出提示跳到登录页面(ajax、导入、导出)

    本文将详细介绍如何实现登录超时后给出提示并跳转到登录页面,主要涉及Ajax提交、过滤器(Filter)以及数据导入导出等相关技术。 一、登录超时验证过滤器 在Java Web应用中,我们可以使用Servlet的Filter接口来...

    Extjs 4.1 (MVC) 如何动态加载控制层以及session 过期该如何处理

    这个问题的解决方案通常涉及到前后端的配合。 在后端处理方面,我们可以通过检查请求头(request headers)中的`accept`字段来判断请求是否来自AJAX。如果`accept`字段中不包含`text/html`,那么可以认为这是一个...

    php 超时取消登陆

    此外,还可以实现一种更智能的方法,如使用AJAX定期发送心跳请求来刷新会话过期时间,这样即使用户在浏览其他页面,只要浏览器窗口打开,会话就不会过早结束。 综上所述,"PHP 超时取消登录"的核心在于合理设置会话...

    Asp.net 中mvc 实现超时弹窗后跳转功能

    在这个版本中,对于AJAX请求,我们将返回一个包含`logoff`标志和`logurl`属性的对象,前端接收到这些数据后可以自己决定如何处理登录超时的情况,比如显示一个模态框或者直接跳转。 总的来说,Asp.net MVC中实现...

Global site tag (gtag.js) - Google Analytics