`

Ext下,ajax请求和普通http请求,session超时转到登录页面的解决方案

    博客分类:
  • AJAX
阅读更多
转载从:
http://blog.csdn.net/oooooooooooooaaa/article/details/4669826

Ext下,ajax请求和普通http请求,session超时转到登录页面的解决方案
分类: JAVA开发 2009-10-14 15:46 3045人阅读 评论(4) 收藏 举报

        对于web应用系统,通常会有以下场景:session超时之后,用户在浏览器中发出请求时将作出session超时的判断,然后系统跳转到登陆页面,提示用户重新登录。
       问题在于,对于普通的http请求,可以通过拦截器判断session超时,然后跳转到登录页面;但是对于Ajax请求,则不会如期待的那样自动转到登录页面,若想实现,必须特殊处理。
      调试中发现,不论是普通http请求还是ajax请求,都可以通过拦截器来将请求捕获,而且区分这两种请求在于头部信息的不同:普通http请求的header参数中没有x-requested-with:XMLHttpRequest头信息,而异步的有。

    

       系统是基于ext的ajax框架,通过上网查资料,发现一个比较好的且对原系统改动很小的解决方案:
       首先在session超时后,通过拦截器将ajax请求拦截,为该请求的设置一个头部信息以标识其超时;然后,由于Ext.ajax是全局单一ajax实例,因此注册Ext.Ajax的requestcomplete事件,每个ajax请求成功后首先响应该事件。在该事件的回调函数里面判断访问请求是否超时。使用Ext.Ajax对象的好处是,只需要引入一个包含了几行超时处理代码的js文件,就可以为当前应用增加超时处理功能,原有代码不需要做任何修改。

[java] view plaincopy
// 拦截器的处理: 
if (request.getHeader("x-requested-with") != null 
                        && request.getHeader("x-requested-with") 
                                .equalsIgnoreCase("XMLHttpRequest")) { 
                    response.addHeader("sessionstatus", "timeout"); 
                } else { 
                     
                    /* 普通http请求session超时的处理 */ 
                    return Action.LOGIN; 
                } 

[javascript] view plaincopy
// ajax回调函数处理系统退出 
Ext.Ajax.on('requestcomplete',checkUserSessionStatus, this);    
function checkUserSessionStatus(conn,response,options){    
    //Ext重新封装了response对象    
    if(response.getResponseHeader.sessionstatus){    
        alert('您的登录已超时,系统即将关闭,请重新开启浏览器登录'); 
        if(window.parent!=null){ 
            window.parent.close(); 
        } 
        window.close(); 
    }    



这里,由于系统只是在主窗体上最多弹出两次窗体,所以在第二级窗体上发出请求时,window.close()并不起作用,弹出的第二级窗体是通过ext渲染到div上的,并非window,但是既然window.close不起作用,说明window对象已不再是指主窗体了,故我猜想,ext框架下,通过div渲染的弹出的窗体,对于ie浏览器而言,也是一个JavaScript的window。
如果系统弹出多级窗体,在请求时,还可以调用
[javascript] view plaincopy
if (window.top!=window.self)  

window.top.close(); 


来完成窗体的关闭,依据DOM标准,Window.top返回最顶层的先辈窗口,因此可以关闭多级窗体。
分享到:
评论

相关推荐

    Ext.Ajax.request2.x实现同步请求

    在EXTJS中,`Ext.Ajax`对象提供了丰富的配置项和方法,如`params`用于传递请求参数,`headers`用于设置HTTP头,`timeout`定义请求超时时间等。同时,`Ext.Ajax`还支持全局配置,通过`Ext.Ajax.defaults`可以设置默认...

    Ext2.0.2的Ajax请求拦截示例

    在Ext JS中,Ajax请求是进行异步数据交互的基础,它允许页面在不刷新的情况下与服务器进行通信。本示例将深入探讨如何在Ext2.0.2中实现Ajax请求的拦截,以便在发送请求前或接收响应后执行自定义逻辑。 首先,我们...

    ext-basex.js 进行Ext.Ajax.request 同步请求 FF无法正常

    标题提到的"ext-basex.js进行Ext.Ajax.request同步请求 FF无法正常"问题,涉及到浏览器兼容性和异步/同步请求的理解。 `Ext.Ajax.request`是ExtJS中的一个方法,用于发起Ajax(异步JavaScript和XML)请求。它可以...

    ext session失效 页面跳转

    如果服务器返回的信息表示Session已经失效,EXT应用可以调用`Ext.util.NavigationModel.redirectTo`或`window.location.href`等方法,将页面重定向到登录页面。 在后端,开发者需要设置Session的生命周期和超时策略...

    Ext.Ajax.request跨域

    标题"Ext.Ajax.request跨域"指出我们将探讨如何使用ExtJS库中的Ajax模块进行跨域请求。Ext.Ajax.request是ExtJS提供的一种发起Ajax请求的方式,它允许开发者向服务器发送异步HTTP请求。然而,由于浏览器的同源策略...

    extjs ajax同步请求所需js

    在ExtJS中,Ajax(异步JavaScript和XML)请求是数据交互的核心部分,用于与服务器进行通信,获取或更新数据。Ajax请求使得页面无需刷新即可更新部分内容,提高了用户体验。 标题中提到的"extjs ajax同步请求所需js...

    Ext.Ajax.request 小问题收集

    在标题提到的"同步请求包"问题中,EXTJS默认情况下,`Ext.Ajax.request`是异步执行的,但有时我们可能需要同步请求,例如在某些数据初始化场景。要实现同步请求,需要设置配置项`async: false`: ```javascript Ext...

    Ext3.1 Ajax 精简包以及使用方法

    Ajax,即异步JavaScript和XML(Asynchronous JavaScript and XML),是Ext3.1中的一个核心特性,它允许Web应用在不刷新整个页面的情况下与服务器进行数据交换,提升用户体验。 在Ext3.1中,Ajax功能主要通过`Ext....

    Ext 操作数据库,对数据的增删改查,包括数据库,Ajax请求和store请求的设置

    在登录功能方面,Ext提供了丰富的组件和布局,如FormPanel、TextField、Button等,可以轻松实现用户界面。主页面的显示则可能涉及到各种组件的组合,如GridPanel、Panel、Toolbar等,配合布局管理器,可以创建出美观...

    ext/ajax开发资料

    EXT是一个强大的JavaScript库,专为构建富客户端Web应用程序而设计,尤其在数据可视化和用户界面组件方面表现出色。Ajax(Asynchronous JavaScript and XML)技术是EXT库中的核心部分,它使得网页可以异步地与服务器...

    Ajax请求在数据量大的时候出现超时的解决方法

    在开发Web应用时,我们经常会遇到使用Ajax进行数据交互的情况,特别是当数据量非常大时,可能会遇到Ajax请求超时的问题。这个问题不仅影响用户体验,也可能导致应用性能下降。本篇文章将详细探讨这个问题,并提供几...

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

    在AJAX(Asynchronous JavaScript and XML)请求中,如果Session超时,通常需要有合适的机制来处理这种情况,以免用户界面出现异常。本文将详细介绍如何使用全局方法来处理AJAX提交时的Session超时,并跳转到特定...

    Ext ajax 上传文件

    在IT行业中,Ajax(Asynchronous JavaScript and XML)技术被广泛应用于网页上的异步数据交互,无需刷新整个页面即可实现局部更新。"Ext Ajax 上传文件"这个主题涉及到的是使用Ext JS框架中的Ajax组件来实现文件的...

    使用Ext2.0的Ajax连接ArcIMS例子

    ### 使用Ext2.0的Ajax...这不仅涉及到XMLHttpRequest对象的使用,还包括了Ext2.0提供的Ajax请求方法的配置和使用。这些知识对于开发者来说是非常有价值的,特别是在开发需要与地图服务器进行通信的Web应用时尤为重要。

    Ext AJAx的同步请求方法

    这是一个对Ext中的AJAx进行扩展了的方法,使其可以支持同步访问

    ajax-ext框架

    4. **文档查阅**:充分利用官方文档和社区资源,遇到问题时及时查找解决方案。 5. **版本控制**:使用版本控制系统如Git,便于团队协作和版本回溯。 总结来说,Ajax-ext框架是建立在Ajax技术和ExtJS基础上的一个...

    ext Ajax库 流行

    2. **异步处理**:EXT Ajax库的异步特性允许开发者在后台发送请求,同时用户仍可继续在页面上进行其他操作,提升了用户体验。 3. **数据格式化**:EXT Ajax库支持多种数据格式,包括JSON、XML、HTML等,可以自动...

Global site tag (gtag.js) - Google Analytics