2011-04-11 123 views
0

EXT JS - 我想知道如何檢查會話時間JSON響應了一樣,如果一個用戶空閒的說20分鐘左右,如果他的會話過期或不Ext JS的會話超時

+1

ExtJS的沒有一個整體很多事情要做會話管理。它是構建應用程序前端的客戶端庫。會話管理髮生在服務器端,使用ExtJS作爲前端在那裏沒有太大的區別。 – Tommi 2011-04-11 17:41:57

+0

所以你的意思是我從服務器端引發異常並在EXT中處理它? – extjsnewbie 2011-04-11 17:46:10

+0

如果你與ExtJS的Ajax請求,它失敗,因爲會話已過期,那麼肯定的是,這是很好的做法,捉內ExtJS的這個錯誤,並採取必要的行動(顯示一個消息,重定向到登錄頁面等)。 – Tommi 2011-04-11 17:50:11

回答

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

你可以嘲笑超時會話...

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); 
    }; 
} 
+1

感謝您的回覆。我能夠以不同的方式來做到這一點 - 當一個新的會話啓動,並且該用戶的身份驗證Cookie過期得到了,我回國,其中包括一條錯誤消息傳遞會話超時的響應。 – extjsnewbie 2011-04-22 14:08:55