EXT JS会话超时

时间:2011-04-11 17:28:07

标签: javascript extjs session-timeout

EXT JS - 我想知道如何检查会话超时的json响应,如果用户闲置20分钟左右,如果他的会话已经过期

2 个答案:

答案 0 :(得分:1)

在ExtJS中没有处理会话超时的标准方法。 ExtJS是一个客户端库,用于创建应用程序的用户界面/前端层,而会话管理则在服务器端进行。

ExtJS Ajax请求实现了一个回调机制。这意味着将某个Javascript函数指定为回调函数,该函数在Ajax请求完成(成功或失败)时调用。以下是从ExtJS API Documentation获取的示例 - 请参阅定义回调函数的参数成功和失败:

// Basic request
Ext.Ajax.request({
   url: 'foo.php',
   success: someFn,
   failure: otherFn,
   headers: {
       'my-header': 'foo'
   },
   params: { foo: 'bar' }
});

因此,在会话超时的情况下,您可以(例如)构造一个JSON响应,其中包含一些错误代码(由您定义),以及要向用户显示的错误消息。然后,回调函数应检查是否从服务器返回此错误,并在发生这种情况时采取必要的操作(显示错误消息,重定向到登录页面等)。

请注意,在上述情况下,从ExtJS的角度来看,Ajax请求实际上是成功的。当HTTP请求完全失败时(HTTP错误如403等),Ajax请求被认为是不成功的。这很重要,因为通常可以为成功和不成功的请求定义不同的回调函数(如上面的示例代码所示)。

答案 1 :(得分:1)

你可以模拟超时会话......

 var keepaliveHandler = new Ext.util.DelayedTask(function(){
    Ext.Ajax.request({
        url : '/keepalive',
        method : 'GET',
        success: function(response, options){
//dummy server call each 60 seconds
            keepaliveHandler.delay(60000);
        }
    });
});
var timeoutHandler = new Ext.util.DelayedTask(function(){
//invalidate session
    Ext.Ajax.request({
        url : '/logout',
        method : 'GET',
        success: function(response, options){
            Ext.MessageBox.show({
                title: MessagesMap.getMessage('session.closed'),
                msg: MessagesMap.getMessage('session.closed.message'),
                buttons: Ext.MessageBox.OK,
                fn: function() {
                    window.location.pathname = '/';                 
                },
                icon: Ext.MessageBox.WARNING
            });
        }
    });
});
if(Ext.ux.SystemProperties.isLogged) {
    keepaliveHandler.delay(60000);
    timeoutHandler.delay(Ext.ux.SystemProperties.timeout);
//check for mouse movements
    document.body.onmousemove = function(e) {
        timeoutHandler.delay(Ext.ux.SystemProperties.timeout);
    };  
}