2011-12-06 43 views
2

我們正在與單點登錄提供程序一起完成一項需要在每個頁面上包含圖像URL以保持其會話存活的Web應用程序。如果它是一個具有多個頁面的標準Web應用程序,這將非常有效,但我們將它製作爲構建在extjs上的單個頁面應用程序。基於用戶交互使會話保持活動狀態的簡單計劃

當我們不會請求包含他們當前使用的「跟蹤像素」的頁面時,尋找關於如何根據用戶活動保持會話活動的想法,因爲我們所有的服務器交互都將基於json/ajax,大部分它將使用sencha的Ext Direct進行大多數客戶端到服務器的通信。當然有人已經做到了。會話不活動計時器大約爲10分鐘。

只是想知道是否有其他人遇到過這個問題,以及你如何處理它。我可以通過setInterval調用來防止會話超時,但這樣做會影響不活動計時器的整體目的。

回答

1

所以重點在於檢測用戶是否在某個時間段內在頁面上做了某些事情,如果是,請撥打電話讓其會話保持活動狀態。

我的想法是每當用戶做某事,記錄活動發生的時間。並且定期調用一個檢查函數來確定是否應該進行make-session-alive調用。

首先,請兩個全局變量:

//The time when last make-session-alive call is made. 
var lastSyncTime = new Date().getTime(); 

//The time when user did something on the page. Reassigned per user activity. 
var lastActiveTime = lastSyncTime; 

二,添加監聽記錄用戶活動時間:

function recordFn(){ 
    lastActiveTime = new Date().getTime(); 
} 

//If there's a lot of clickable stuff, add a click listener to the container 
Ext.getBody().on('click', recordFn); 

//If there's a lot of input stuff 
Ext.getBody().on('keypress', recordFn); 

//If ajax call should be detected 
Ext.Ajax.on('beforerequest', recordFn); 

末,定期調用檢查功能:

SessionExpiredTime = 1000 * 60 * 10; //ten minutes. 
function checkFn(){ 
    if(lastActiveTime - lastSyncTime < SessionExpiredTime){ 
    //Make Ajax call to refresh session... 

    //Reassign 
    lastSyncTime = new Date().getTime(); 
    lastActiveTime = lastSyncTime; 
    } 
} 
setInterval(checkFn, SessionExpiredTime - 1000 * 60); 
+0

難道你在這裏省略.getTime(): 'function recordFn(){lastActiveTime = new Date()。getTime();}'? – boatcoder

+0

是的,它不見了。我修改了它。 @ Mark0978 –

相關問題