`

session超时,处理ajax请求 (转)

 
阅读更多
文章出处:http://blog.csdn.net/zuxianghuang/article/details/7270489

项目使用的是spring-security安全框架,当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超时处理流程

    Ajax请求session超时处理流程 java服务器端处理: SessionValidateFilter中修改: if (ServerInfo.isAjax(request)) { request.setAttribute("statusCode", 301); request.setAttribute("message", "Session ...

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

    现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax请求是XMLHTTPRequest对象发起的而不

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

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

    Spring Boot Redis Session 共享(Ajax 跨域)

    - `demo2`可能是对`demo1`的扩展,增加了CORS配置,允许跨域的Ajax请求访问服务端资源。 总结,通过Spring Boot结合Redis,我们可以实现高效的分布式Session共享,确保用户会话在多服务器环境下的一致性。同时,...

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

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

    JSPsession超时提示

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

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

    后端过滤器负责检测并处理Session超时,前端通过监听Ajax错误事件,捕获302状态码并模拟页面跳转,确保无论用户是通过常规链接还是Ajax请求,一旦Session超时都能被正确引导到登录页面。这种做法不仅维护了用户操作...

    ajax请求Session失效问题

    现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax请求是XMLHTTPRequest对象

    Javaweb项目session超时解决方案

    Javaweb项目Session超时解决方案 在Java Web开发中,Session机制为我们提供了许多方便,...解决Javaweb项目Session超时问题需要对所有的/web/请求进行登录拦截,配置Session超时时间,并使用拦截器来处理后端请求。

    Ajax请求session失效该如何解决

    2. 在前端JavaScript中监听Ajax请求的响应,根据响应头判断Session是否超时并做出相应处理。 这种做法确保了无论是常规请求还是Ajax请求,当Session失效时都能正确地通知用户并引导他们重新登录,从而保持应用的...

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

    总结来说,实现Webix+Spring MVC环境下Session超时跳转登录页面的关键在于,前端扩展Webix的Ajax请求处理,添加对Session超时的检查,并在检测到超时后使用JavaScript进行页面重定向;后端则需在Spring MVC的拦截器...

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

    当心跳请求到达服务器时,服务器会检查session是否超时,若超时则清除session中的用户信息。 4. **关闭浏览器处理**:由于浏览器关闭时不会主动发送任何请求,服务器无法直接感知。通常需要在前端设置事件监听器,...

    session timeout/logout using php and AJAX :

    设置session超时时间是为了防止恶意用户长时间占用资源,同时也是为了保护用户数据的安全,避免因用户忘记退出而被他人窃取。 **PHP中的Session管理**:在PHP中,可以使用`session_start()`函数开启一个新的会话,`...

    一个用客户端js脚本函数进行网页Session超期统计个数显示函数库

    由于Session本身是在服务器端管理的,因此,这个库可能通过定时发送Ajax请求到服务器,获取Session信息,然后在客户端处理和展示。 描述中提到的“采用纯js实现,可以动态监测Web网页Session超期的个数”,意味着...

    ext session失效 页面跳转

    这通常是通过Ajax请求完成的。如果后端返回的响应表明Session已过期,EXT应用可以触发一个事件,该事件负责处理页面的跳转。 实现这个功能,开发者通常会在EXT应用中的某个全局或关键位置(如路由控制器)设置一个...

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

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

    session过期问题

    2. **JavaScript心跳检测**:客户端可以通过定期发送Ajax请求(心跳检测)来保持Session活动。每当服务器接收到心跳请求时,就会刷新Session的过期时间。这种方法可以避免用户因为长时间无操作而导致Session过期,但...

Global site tag (gtag.js) - Google Analytics