2011-12-06 1 views
2

우리는 세션을 유지하기 위해 모든 페이지에 이미지 URL을 포함시켜야하는 웹 응용 프로그램을 만들기 위해 싱글 사인온 공급자와 협력하고 있습니다. 여러 페이지가있는 표준 웹 앱이라면 훌륭하게 작동하지만 extj를 기반으로하는 단일 페이지 앱으로 만들고 있습니다.사용자 상호 작용을 기반으로 세션을 유지하기위한 간단한 계획

우리의 모든 서버 상호 작용은 json/ajax 기반이고 대부분의 서버 상호 작용은 현재 사용중인 "추적 픽셀"이 포함 된 페이지를 요청하지 않을 때 사용자 활동을 기반으로 세션을 유지하는 방법에 대한 아이디어를 찾고 있습니다. 대부분의 클라이언트 - 서버 통신에는 sencha의 Ext Direct이 사용됩니다. 확실히 다른 사람이이 작업을 수행했습니다. 세션 비활성 타이머는 약 10 분입니다.

다른 사람이이 문제를 겪고 있는지, 어떻게 처리했는지 궁금합니다. setInterval 호출로 세션 타임 아웃을 충분히 쉽게 막을 수는 있지만 비활성 타이머의 모든 목적을 무효로 만들 수 있습니다.

답변

1

그래서 요점은 사용자가 일정 기간 동안 페이지에서 수행 한 작업을 감지하고 그렇다면 그의 세션을 활성 상태로 유지하기 위해 전화를 걸기위한 것입니다.

제 생각에는 사용자가 작업을 수행 할 때마다 활동이 발생하는 시간을 기록하십시오. 그리고 make-session-alive 호출이 만들어 져야 하는지를 결정하기 위해 check 함수가 정기적으로 호출 될 것입니다.

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); 

마지막으로, 정기적으로 전화를 체크 기능 : 사용자 활동 시간을 기록하는 리스너를 추가,

//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; 

둘째 :

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 –