X時間後にセッションを閉じたい場合は、ajaxリクエストが行われているかどうかに関係なく、ユーザーがページでアクティビティを行っていない場合にのみ、私が使用している次のコードを使用できます:
(function () {
// After 30 minutes without moving the mouse, the user will be redirect to logout page
var time2refresh = 30;
// This is how many time the user has to be inactive to trigger the countdown of 30 minutes
var timeInactive = .5;
// This will store the timer in order to reset if the user starts to have activity in the page
var timer = null;
// This will store the timer to count the time the user has been inactive before trigger the other timer
var timerInactive = null;
// We start the first timer.
setTimer();
// Using jQuery mousemove method
$(document).mousemove(function () {
// When the user moves his mouse, then we stop both timers
clearTimeout(timer);
clearTimeout(timerInactive);
// And start again the timer that will trigger later the redirect to logout
timerInactive = setTimeout(function () {
setTimer();
}, timeInactive * 60 * 1000);
});
// This is the second timer, the one that will redirect the user if it has been inactive for 30 minutes
function setTimer() {
timer = setTimeout(function () {
window.location = "/url/to/logout.php";
}, time2refresh * 60 * 1000);
}
})();
したがって、この関数のロジックは次のとおりです。
1) ユーザーがサイトにログインします 2) 非アクティブ状態が 0.5 分 (30 秒) 続くと、30 分のカウントダウンが開始されます 3) ユーザーがマウスを動かすと、両方のタイマーがリセットされ、最初のタイマーが再び開始されます。4) 30 分経過してもユーザーがマウスを動かさない場合、ログアウト ページにリダイレクトされ、セッションが閉じられます。