モニターを作成する際に、ユーザーがブラウザーでボタンをクリックしたり、テキストボックスに入力したりする(ドキュメント上でマウスをホバーしない)などのアクティビティをモニターします。そのため、ユーザーからのアクティビティが長時間ない場合、セッションはタイムアウトします。
Jqueryなどを使用せずに実行する必要があります。私はajaxを使用することがあります。 Java反対側のサーブレットが望ましい。
ここに純粋なJavaScriptの方法があります アイドル時間を追跡し、特定の制限に達するとアクションを実行し、それに応じて変更して使用できます
var IDLE_TIMEOUT = 60; //seconds
var _idleSecondsCounter = 0;
document.onclick = function() {
_idleSecondsCounter = 0;
};
document.onmousemove = function() {
_idleSecondsCounter = 0;
};
document.onkeypress = function() {
_idleSecondsCounter = 0;
};
window.setInterval(CheckIdleTime, 1000);
function CheckIdleTime() {
_idleSecondsCounter++;
var oPanel = document.getElementById("SecondsUntilExpire");
if (oPanel)
oPanel.innerHTML = (IDLE_TIMEOUT - _idleSecondsCounter) + "";
if (_idleSecondsCounter >= IDLE_TIMEOUT) {
alert("Time expired!");
document.location.href = "logout.html";
}
}
このコードは、アラートを表示してリダイレクトするまで60秒待機し、アクションはカウント(マウスクリック、マウスの移動、またはキーの押下)を「リセット」します。
それは可能な限りクロスブラウザであり、単純である必要があります。 SecondsUntilExpireのIDでページに要素を追加する場合、残り時間の表示もサポートします。
参照: ブラウザのアイドル時間を知る方法
提案するアプローチの問題は、ユーザーがマウスを動かしたり入力を入力したりしても、セッションがタイムアウトすることです。したがって、セッションタイムアウトを20分に設定し、ユーザーが21分間入力し続けると、セッションは「アクティブ」であったとしてもタイムアウトします。セッションがタイムアウトしないようにする唯一のことは、サーバーへの新しいリクエストです。
解決策1:サーバーがセッションタイムアウトを制御できるようにする
セッションを更新し続けるバックグラウンドでAjaxリクエストを行っている場合を除き、ページが読み込まれたときにJavaScriptタイムアウトを設定し、そのようにユーザーに警告することができます。サーバーに他のリクエストを行う場合を除き、ユーザーがページにいる間は、それを難しくする必要はありません。
setTimeout(function () {
alert("You've timed out baby!");
}, 1200000); // 20 minutes in millisec (modify to your session timeout)
ユーザーが別のページにアクセスするか、ページをリロードすると、セッションが更新され、JavaScriptタイマーがリセットされます。ユーザーがそのようなことをしない場合、ユーザーがアラートを受け取ると同時にセッションがタイムアウトします。
解決策2:クライアントがセッションタイムアウトを制御できるようにする
セッションの継続時間をJavaScriptで完全に制御して、ユーザーが入力、マウスなどを移動するたびにJavaScriptが更新されるようにするには、サーバーのバックグラウンドでAjaxリクエストを作成し続ける必要があります。セッションが更新されます。 (これは空のダミー要求である可能性があり、サーバーにヒットするものだけです)
次に、「ユーザーアクティビティ」と考えるすべてのアクションを追跡し(AnhSirkが答えに1つの方法を提案します)、そのようなイベントが発生したときにタイムアウトタイマーをリセットする必要があります。ユーザーの非アクティブ状態が長すぎる場合は、サーバー上のページにAjaxリクエストを行う必要があります。これにより、セッションが無効になり、セッションがタイムアウトしたことをユーザーに警告できます。