ページにユーザーアクティビティがあります。ユーザーが30分間非アクティブ(マウスを動かさなかった)になると、セッションがまもなく期限切れになることをユーザーに警告します。ユーザーが[ OK ]ボタンをクリックせずに非アクティブのままでいる場合、自動的にログアウトされます(セッション破棄)。
現在、これは25分ごとにチェックされており、ユーザーが同じページの複数のタブを開くまで、すべてが正常に機能します。複数のタブが開いていて、ユーザーが1つのタブで作業しているが、もう1つのタブを25分間開いたままにすると、タイムアウトになります。
複数のタブが開いていて、ユーザーが少なくとも1つのタブでアクティブになっている場合、つまりユーザーがページの少なくとも1つのタブでマウスを動かしている場合に、セッションがタイムアウトしないようにするにはどうすればよいですか。
マウスの動きを検出するjsコードは以下のとおりです。
timer = 0;
function cIncrement() {
if (timer == 25) {
//25 minutes passed warn user that in 5 minutes it will expire
//here is the code that prompts user with dialog
if (OK clicked on dialog) {
timer = 0;
} else {
//execute logout script.
}
}
if (timer == 30) {
//30 minutes passed log user out
//script to log user out
}
}
$(function() {
var interval = setInterval("cIncrement()", 60000); //increment every minute
//reset timer on mouse move
$(document).mousemove(function(e) {
timer = 0;
});
});
注:上記のコードは、1つのタブが開いているときに正常に機能します。
2つ以上のタブが開いていて、いずれかのタブでユーザーがアクティブになっている場合にタイマーを0にリセットするように、これをどのように変更しますか?