0

ページにユーザーアクティビティがあります。ユーザーが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にリセットするように、これをどのように変更しますか?

4

1 に答える 1

0

サーバー側のセッション オブジェクトがあるとします。おそらく、サーバー側のセッションオブジェクトにも何らかの有効期限があるので、ユーザーがブラウザを閉じたり、ラップトップの蓋を閉じて数週間休暇を取ったりするセッションを取得できます.フォーカスのあるタブ/ウィンドウに関係なく、サーバー側のアクティビティのタイムアウトがリセットされます。

そのため、 ではcIncrement、最後のアクティビティからどれくらい前かをサーバーに尋ねる Ajax リクエストを開始し、そのレスポンスを使用して をリセットしtimerます。

マウスの動きだけがキャプチャされた場合でも、セッションを開いたままにしておくことに本当に積極的になりたい場合は、ページのタイマーの現在の値を送信し、それを使用してセッションの最新のアクティビティである場合はセッションの更新時間を移動します。

于 2013-03-13T20:59:22.913 に答える