转自:http://blog.csdn.net/zuxianghaung/article/details/7270489
当session超时时,如果不是ajax请求,很简单就能实现跳到指定的页面。但是ajax请求就会有问题。session超时的时候,点击到ajax请求就会弹出一些页面源码文件。
由于一直都在忙其他的这个问题一直放着。最近有时间了,就把这个问题给解决了。
首先建了个拦截器,来判断session超时。用户登录后会保存用户信息在一个session里,在session的监听里,session超时会销毁保存在session里的用户信息,而拦截器就通过session里是否有用户信息来判断session超时。(我总觉得这种方法不怎么好。不知还有什么更好的办法。)
拦截器是spring-mvc的拦截器,在拦截器里判断是不是ajax请求:
[java] view plaincopy
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception
{
if (request.getSession().getAttribute("user") == null)//判断session里是否有用户信息
{
if (request.getHeader("x-requested-with") != null
&& request.getHeader("x-requested-with")
.equalsIgnoreCase("XMLHttpRequest"))//如果是ajax请求响应头会有,x-requested-with;
{
response.setHeader("sessionstatus", "timeout");//在响应头设置session状态
return false;
}
}
return true;
}
这样,如果session超时,而且是ajax请求,就会在响应头里,sessionstatus有一个timeout;
再用一个全局的方法来处理,session超时要跳转的页面。
jquery 可以用$.ajaxSetup 方法,ext也有类似的方法
[javascript] view plaincopy
//全局的ajax访问,处理ajax清求时sesion超时
$.ajaxSetup({
contentType:"application/x-www-form-urlencoded;charset=utf-8",
complete:function(XMLHttpRequest,textStatus){
var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus"); //通过XMLHttpRequest取得响应头,sessionstatus,
if(sessionstatus=="timeout"){
//如果超时就处理 ,指定要跳转的页面
window.location.replace("${path}/common/login.do");
}
}
}
});
分享到:
相关推荐
Ajax请求session超时处理流程 java服务器端处理: SessionValidateFilter中修改: if (ServerInfo.isAjax(request)) { request.setAttribute("statusCode", 301); request.setAttribute("message", "Session ...
现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax请求是XMLHTTPRequest对象发起的而不
- `demo2`可能是对`demo1`的扩展,增加了CORS配置,允许跨域的Ajax请求访问服务端资源。 总结,通过Spring Boot结合Redis,我们可以实现高效的分布式Session共享,确保用户会话在多服务器环境下的一致性。同时,...
总结来说,处理Ajax请求中的Session超时问题,需要服务器端能够识别并标记超时的Ajax请求,同时客户端需要能够正确响应并处理这些标记。这样的设计既保持了用户体验的连续性,又确保了系统的安全性。在实际项目中,...
### JSP Session超时提示知识点解析 #### 一、背景介绍 在Web应用程序中,`session` 是一种常用的技术手段,用于保存用户的状态信息。它能够帮助开发者在多个页面请求之间保持用户的数据一致性。然而,为了提高安全...
这里提到的主题是关于如何在AJAX请求中处理Session超时,并使用全局的方法进行跳转。下面我们将深入探讨这个话题。 首先,我们来看在过滤器中处理Session超时的代码片段。过滤器是Servlet技术中的一种机制,可以在...
现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax请求是XMLHTTPRequest对象
后端过滤器负责检测并处理Session超时,前端通过监听Ajax错误事件,捕获302状态码并模拟页面跳转,确保无论用户是通过常规链接还是Ajax请求,一旦Session超时都能被正确引导到登录页面。这种做法不仅维护了用户操作...
Javaweb项目Session超时解决方案 在Java Web开发中,Session机制为我们提供了许多方便,Session是由浏览器和服务器之间维护的。Session超时理解为:浏览器和服务器之间创建了一个Session,由于客户端长时间(休眠...
关键的一步是,当检测到Ajax请求时,我们不是重定向,而是通过设置响应头(`sessionstatus`)告知前端Session已超时: ```java if (req.getHeader("x-requested-with") != null && req.getHeader("x-requested-with...
然而,当Session超时,Spring MVC不会直接向Ajax请求返回重定向信息,因为Ajax请求通常是异步的,它不支持直接的页面重定向。 解决这个问题的方法是,我们需要在Webix的Ajax请求处理中添加对Session超时的检测和...
之后的每次请求,客户端都会携带这个session ID,服务器根据ID找到对应的session数据,实现用户状态的保持。 **会话超时(Session Timeout)**是指用户在一定时间内未与网站交互,系统自动认为用户已离线并结束其...
当心跳请求到达服务器时,服务器会检查session是否超时,若超时则清除session中的用户信息。 4. **关闭浏览器处理**:由于浏览器关闭时不会主动发送任何请求,服务器无法直接感知。通常需要在前端设置事件监听器,...
在实际应用中,这种Session超时统计对于网站管理员尤其有用,他们可以实时了解在线用户的活跃状态,以及可能因Session超时导致的用户体验问题。同时,对于用户来说,如果设计得当,也可以作为一种提醒机制,避免因为...
例如,我们可以在每个页面加载时发送一个定时的Ajax请求,如果在设定的时间间隔内没有收到新的请求,前端可以提示用户登录已超时: ```javascript // 假设超时为30分钟,设置定时器每5分钟发送心跳请求 var ...
2. **JavaScript心跳检测**:客户端可以通过定期发送Ajax请求(心跳检测)来保持Session活动。每当服务器接收到心跳请求时,就会刷新Session的过期时间。这种方法可以避免用户因为长时间无操作而导致Session过期,但...
这通常是通过Ajax请求完成的。如果后端返回的响应表明Session已过期,EXT应用可以触发一个事件,该事件负责处理页面的跳转。 实现这个功能,开发者通常会在EXT应用中的某个全局或关键位置(如路由控制器)设置一个...