私はこれをクライアントで処理します。機能をカプセル化するオブジェクトを作成します。
何かのようなもの:
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 を inactivity イベントが発生するまでの秒数に設定します。promptIndex を、ユーザーがまだそこにいる場合にプロンプトが表示される残りの秒数に設定します。上記のコードは非アクティブ タイムアウトを 15 秒に設定し、残り 5 秒のマークでアイドル プロンプトが呼び出されます。
ページの読み込み時に、非アクティブ タイマーを開始します。
$(function () {
UserInactivityMonitor.initialize();
});
AJAX リクエストで、カウンターをリセットします。
$("#fooButton").on('click', function () {
$.ajax(
{
url: $("#buttonClickPostUrl").val(),
data: {
someData: 'data'
},
type: 'POST',
complete: function () {
UserInactivityMonitor.resetInactivityIndex();
}
});
});
サーバーがセッション状態を維持している場合は、サーバーに要求を戻してセッションを強制終了し、オプションでブラウザーをイベントの適切なページに誘導する必要があります。これは fireInactivityAlert() 関数で行います。