나는 이것을 클라이언트에서 처리 할 것이다. 기능을 캡슐화 할 객체를 만듭니다. 같은
뭔가 : 비활성 이벤트가 발생하기 전에 통과 (초)에
var UserInactivityMonitor = UserInactivityMonitor || {};
UserInactivityMonitor = (function (module) {
var inactivityIndex;
var promptIndex;
var timer;
module.startInactivityMonitor = function() {
module.timerTick();
};
module.timerTick = function() {
inactivityIndex--;
if (inactivityIndex === 0) {
module.fireInactivityAlert();
}
if (inactivityIndex === promptIndex) {
module.fireIdlePrompt();
}
timer = setTimeout(module.timerTick, 1000);
};
module.fireIdlePrompt = function() {
var response = confirm('are you stil there?');
if (response === true) {
module.resetInactivityIndex();
}
};
module.resetInactivityIndex = function() {
inactivityIndex = 15;
promptIndex = 5;
};
module.fireInactivityAlert = function() {
alert('Inactivity alert!');
};
module.initialize = function() {
module.resetInactivityIndex();
module.startInactivityMonitor();
};
return module;
})(UserInactivityMonitor || {});
설정 inactivityIndex. promptIndex를 남은 시간 (초)으로 설정하여 사용자에게 메시지가 표시 될 때까지 기다립니다. 위의 코드는 비활성 시간 초과를 15 초로 설정하고 나머지 5 초에 유휴 프롬프트가 호출됩니다. 다시, 카운터 어떤 AJAX 요청에
$(function() {
UserInactivityMonitor.initialize();
});
: 서버가 세션 상태를 유지하고
$("#fooButton").on('click', function() {
$.ajax(
{
url: $("#buttonClickPostUrl").val(),
data: {
someData: 'data'
},
type: 'POST',
complete: function() {
UserInactivityMonitor.resetInactivityIndex();
}
});
});
경우에 당신이 요청을 확인하는 것이 좋습니다를 페이지로드
비활성 타이머를 시작합니다 서버로 돌아가서 세션을 종료하고 선택적으로 브라우저를 이벤트에 적합한 페이지로 안내합니다. fireInactivityAlert() 함수에서이 작업을 수행합니다.
나는 뭔가를 놓칠지도 모르지만 나는 당신이 행동 필터없이 이것을 할 수 있다고 생각한다. 나는 타이머가 각 뷰 렌더링 (로그인 한 경우)시 재설정되고, 15 분 후 시작한 다음, 응답 한 후 다시 설정됩니다. 그렇다면 상당히 단순한 디자인이라고 생각할 수 있습니다. –
큰 질문입니다! –