Ajax请求session失效该如何解决

一般来说我们的项目都有登录过滤器,一般请求足以搞定。但是AJAX却是例外的,所以解决方法是设置响应为session失效。

一共分为过滤器和页面JS两个部分的设置,先看过滤器的修改:

import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * 登录过滤器 *  拥有Session是否失效和用户是否登录2个条件判断 *  如果是ajax请求则设置session超时 * @author Merlin.Ma * */ public class LoginFilter implements Filter{ private String redirectUrl = "/login.html"; private String sessionKey = "userName"; @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse rep = (HttpServletResponse) response; HttpSession session = req.getSession(); if( session == null || session.getAttribute(sessionKey) == null){ //如果判断是 AJAX 请求,直接设置为session超时 if( req.getHeader("x-requested-with") != null && req.getHeader("x-requested-with").equals("XMLHttpRequest") ) { rep.setHeader("sessionstatus", "timeout"); } else { rep.sendRedirect( req.getContextPath() + redirectUrl); } }else { chain.doFilter(request, response); } } @Override public void init(FilterConfig filterConfig) throws ServletException { String url = filterConfig.getInitParameter("redirectUrl"); String key = filterConfig.getInitParameter("sessionKey"); redirectUrl = url == null? redirectUrl:url; sessionKey = key == null ? sessionKey : key ; } }

代码简单,就不过多进行注释了,现在看JS部分的代码。当然是基于jQuery的~~

//全局的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("login.html"); } } });

页面加载这段js代码,然后开始调用ajax。在不登陆或者session失效的情况下,可以看到页面跳转到登录页面。

时间: 2024-11-01 10:04:22

Ajax请求session失效该如何解决的相关文章

Ajax请求session失效该如何解决_AJAX相关

一般来说我们的项目都有登录过滤器,一般请求足以搞定.但是AJAX却是例外的,所以解决方法是设置响应为session失效. 一共分为过滤器和页面JS两个部分的设置,先看过滤器的修改: import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletExcep

ajax请求Session失效问题_AJAX相关

最近由于一个项目,模块切换为ajax请求数据,当Session失效后,ajax请求后没有返回值,只有响应的html: <html> <script type='text/javascript'>window.open('http://192.168.0.118:8080/welcomeAction/loginUI.do','_top'); </script> </html> 现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Aj

ajax请求Session失效问题

最近由于一个项目,模块切换为ajax请求数据,当Session失效后,ajax请求后没有返回值,只有响应的html: <html> <script type='text/javascript'>window.open('http://192.168.0.118:8080/welcomeAction/loginUI.do','_top'); </script> </html> 现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Aj

AJAX请求session失效,服务器端怎么重定向页面

问题描述 AJAX发起的请求,服务器端(Filter)如果不通过,如session失效了需要重定向到登陆页面,该怎么做? 解决方案 这个需要服务器端和客户端的配合,以jquery为例.首先,你的服务器端要能检测到未登录,并输出JSON格式的错误信息到前端,其次,在前端调用你需要自定义一个ajax请求方法,从而可以可以控制所有的ajax请求.关键就是需要在前端捕获到服务端返回的错误,由前端做重定向处理.function send(......){//参数return jQuery.ajax({ty

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

 这篇文章主要介绍了iframe跨域与session失效问题的解决办法,有需要的朋友可以参考一下 何为跨域跨域session/cookie?   也就是第三方session/cookie.第一方session/cookie指的是访客当前访问的网站给访客的浏览器设置的seesion /cookie, 会被存储在访客的计算机上.第三方session/cookie指的是当前访问的网站中会加载(嵌入)另外第三方的网站代码,例如促销广告,那么第三方网 站也会在访客的计算机上添加session/cookie

ajax请求 session超时

问题描述 ajax请求 session超时 ajax请求,session超时的情况下,怎么跳转到首页?通过request.getHeader(""x-requested-with"")可以获取到是ajax请求的,也知道将信息放到response,但是页面上要写一个jquery.ajaxSetup({...})处理ajax请求时session的超时,这个是怎么用的???放到什么位置 解决方案 超时的时候你返回一个特殊信息,如offline,ajax判断返回信息存在of

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

在使用spingMVC的拦截器来处理用户session失效的问题时,当用户session失效会返回一串javascript字符串强制用户浏览器跳转至登录页面.然而当使用Ajax请求数据时,在验证失败后只会响应一串字符串,JavaScript并不会执行,这是由于Ajax的请求是由XMLHTTPRequest对象发起的而不是浏览器,在验证失败后服务器返回的信息会被XMLHTTPRequest对象接收到并保存在js对象中. 为了应对这种情况,可以在后台对Http请求先进行判断,将Ajax请求与普通ht

iframe跨域与session失效问题的解决办法_实用技巧

何为跨域跨域session/cookie? 也就是第三方session/cookie.第一方session/cookie指的是访客当前访问的网站给访客的浏览器设置的seesion /cookie, 会被存储在访客的计算机上.第三方session/cookie指的是当前访问的网站中会加载(嵌入)另外第三方的网站代码,例如促销广告,那么第三方网 站也会在访客的计算机上添加session/cookie,这种就是第三方session/cookie. 我的问题 在开发讯息在线产品(http://iap.p

ASP.NET 程序中删除文件夹导致session失效问题的解决办法分享_实用技巧

在Global中  Application_Start 添加 如: 复制代码 代码如下: void Application_Start(object sender, EventArgs e)    {        //在应用程序启动时运行的代码        System.Reflection.PropertyInfo p = typeof(System.Web.HttpRuntime).GetProperty("FileChangesMonitor", System.Reflect