`

ajax访问后台session超时处理

 
阅读更多

 

在web开发中,通常会有session超时处理,对于普通的http请求比较容易处理,而对于ajax异步请求,可能就需要特殊处理了

 

/* 服务器端:拦截器或过滤器处理:*/
 
// 异步请求session超时的处理
if (request.getHeader("x-requested-with") != null && 
    request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {
    PrintWriter wirter =  response.getWriter();
    wirter.write("timeout");
    wirter.flush();
} else {              
    // 普通http请求session超时的处理
    return Action.LOGIN;
}

 

/* 浏览器端:JQuery添加全局AJAX默认选项:complete回调函数:*/
 
$.ajaxSetup({
    global: false,
    type: "POST",
    complete: function (XMLHttpRequest, textStatus) {
        var data = XMLHttpRequest.responseText;
        if (data == "timeout") {
            if( window.top != window.self ){
                window.top.location = "${pageContext.request.contextPath}";
            }
        }
    }
});

 另注:

jquery中各个事件执行顺序如下:
    ajaxStart(全局事件)
    beforeSend
    ajaxSend(全局事件) 
    success
    ajaxSuccess(全局事件)
    error
    ajaxError (全局事件)
    complete
    ajaxComplete(全局事件)
    ajaxStop(全局事件)

 统一封装AJAX请求,监听响应头,如果sessionStatus是timeout

那就 用JS跳到登录就好了 window.location

 

function checkSessionTimeout(response){
    if(response.getResponseHeader){
        var sessionStatus = response.getResponseHeader("sessionstatus");
        if (sessionStatus == 'timeout') {
            var redirect = response.getResponseHeader("Location");
            window.location = redirect;
            return;
        }
    }
}

 自定义一个拦截器,在timeout的时候丢出

   response.setHeader("Location",request.getContextPath()+timeoutUrl);
    response.sendError(HttpServletResponse.SC_FORBIDDEN, "登录超时或无效!");
    response.setHeader("sessionstatus", "timeout");

 可以根据请求头来判断请求是不是ajax ,如果是普通的就不需要直接跳到登录就好了,如果是AJAX就丢出一个状态码。如果不想自定义拦截器的话,直接监听响应的状态码也可以

 

http://www.cnblogs.com/zolz/articles/4883698.html

 

参考:

http://www.anyrt.com/blog/list/ajaxsession.html

http://daichangfu.iteye.com/blog/1705097

 

 

分享到:
评论

相关推荐

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

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

    session 超时

    知识点一:session超时概念及设置 session超时是指用户在web系统中进行操作时,如果在一定的时间内没有任何操作,系统会自动认为用户已经离开,这时session(会话)会失效,用户下次进行操作时需要重新登录验证身份...

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

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

    thinkphp5.0-php登录超时检测功能的类

    登录超时通常基于会话(Session)管理,当用户成功登录后,服务器会创建一个唯一的Session ID,并将其存储在用户的浏览器Cookie中。每次用户请求页面时,服务器会检查这个Session ID来识别用户的身份。当设置的超时...

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

    Ajax的核心在于通过XMLHttpRequest对象与服务器进行后台通信,实现了数据的异步交换。在这个聊天室系统中,用户可以即时发送消息,看到其他人的回复,从而增强交互性。 【关闭浏览器和登出控制使session失效】是Web...

    ext session失效 页面跳转

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

    day18 监听器 统计在线人数,定时销毁超时session,钝化活化session,在线列表显示和踢人功能防止用户自动登录,在线支付

    例如,我们可以设置一个后台任务,每隔一段时间检查所有session,如果发现某个session已经超时,就主动调用session.invalidate()来销毁它。 钝化(Passivation)和活化(Activation)是session管理的高级特性,主要...

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

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

    phpcms web发布session过期问题解决

    例如,session超时时间可能设置为`session.gc_maxlifetime`,默认值为1440秒(即20分钟)。如果用户希望session保持更长时间,可以通过修改这个值来延长。 解决phpcms session过期问题的方法有以下几种: 1. **...

    AJAX技术和Web考试系统

    服务器端通过session等技术仅接收合法的客户端请求,防止非法访问。 **系统设计与实现** 1. **系统设计**:登录时,用户的登录时间存储在session中,用于计时。考试期间,JavaScript定时向服务器请求时间信息,并...

    Ajax安全技术pdf

    防范措施包括:对用户输入进行严格的过滤和转义,使用HTTPOnly cookie防止脚本访问敏感的session信息,以及利用Content Security Policy(CSP)限制页面可执行的脚本源。 ### 二、跨站请求伪造(CSRF) CSRF攻击...

    Ajax安全技术.pdf 高清扫描版

    - Ajax应用中,由于频繁的后台请求,如果没有合适的防御机制,更容易受到CSRF攻击。 3. **数据泄露** - Ajax应用通常会通过HTTP协议与服务器进行数据交换,如果数据传输过程没有加密保护,则容易被截获,导致敏感...

    基于Ajax的chat实现

    后端通常负责接收和处理Ajax请求,以及存储和检索聊天记录。这可能涉及到数据库操作,如使用SQL查询来获取最新的聊天记录。如果采用长轮询,后端需要保持连接状态,直到有新消息或者超时。 6. **安全性与性能优化*...

    新版JSP+JQUERY+AJAX+Mysql聊天室小程序JASChatWeb1.0

    (2)打开tomcat/conf/web.xml文件 ,找到 <session-timeout>30</session-timeout> 一行, 把30改成 1-5的数(作用设置是session超时时间,用于扑捉用户直接关闭浏览器时的下 线状态) 完成以上两步后打开tomcat即可在...

    简单的购物车实现计算

    需要注意的是,为了保证项目的可移植性和避免session数据丢失,通常还会配置session的超时时间和跨域共享策略。 总的来说,这个简单的购物车实现计算项目展示了如何利用JSP和session来实现一个基本的电商购物车功能...

    dwz与thinkphp结合项目

    通过Ajax请求,前端可以发送数据到后台的控制器,控制器处理后返回结果,更新表格或者提示用户。这种异步交互方式极大地提高了用户的操作效率。 权限管理是企业级应用中的核心部分。DWZ提供了角色权限分配和菜单...

    crud-php-ajax

    7. **错误处理**:前端也需要处理可能出现的网络错误,如超时或请求失败,并向用户提供友好的反馈。 总的来说,"crud-php-ajax"项目是学习和实践PHP与AJAX结合进行动态网页开发的一个典型示例,它涵盖了Web开发中...

    Ajax长连接项目案例

    4. **资源管理**:长时间的Ajax连接可能会占用浏览器的资源,需要合理管理,比如使用Web Worker进行后台运行,以减少对用户界面的影响。 5. **兼容性考虑**:并非所有浏览器都支持Ajax长连接,需要考虑不同浏览器的...

    单点登录+在线列表+防浏览器关闭

    当用户关闭浏览器时,若能检测到Cookie被清除或Session超时,系统可自动执行登出操作。 2. **Web Storage(LocalStorage和SessionStorage)**:相比于Cookie,Web Storage提供了更大的存储空间,并且可以更灵活地...

    Java 实现 Comet 长连接,服务器主动发送消息给客户端

    - 创建一个继承自 `javax.websocket.Session` 的监听器,处理服务器端的打开、关闭和消息事件。 - 在 `onOpen()` 方法中,初始化连接,记录客户端会话。 - 在需要发送消息时,调用 `Session.getAsyncRemote()....

Global site tag (gtag.js) - Google Analytics