2017-06-17 22 views
0

期限切れになる前にセッションの有効期限をユーザーに通知する必要がありました。私はsetTimeoutを使ってこれをjqueryで実装しました。ユーザーが1つのタブで作業するまではうまく動作します。この問題は、複数のタブが開いたままになっている場合に発生します。この場合、他のタブが非アクティブなのでユーザーがタブで作業していても、非アクティブなタブにはアラートが表示されます。ユーザーが1つのタブでアクティブになっているため、これは発生しません。asp.net webformsでセッションの有効期限を通知する

私はコードの下のようなものを使用しています。私の意見では

function SessionExpireAlert() { 

     var timeout = 20000; 

     var seconds = timer/1000; 


     document.getElementsByName("seconds").innerHTML = seconds; 
     setInterval(function() { 
      seconds--; 
      document.getElementById("seconds").innerHTML = seconds; 

     },1000); 
     setTimeout(function() { 
      //Show Popup before 20 seconds of timeout. 
      $find("mpeTimeout").show(); 
     }, timeout - 19 * 1000); 
     setTimeout(function() { 

      window.location = "Default.aspx"; 
     }, timeout); 
    }; 
    function ResetSession() { 
     //Redirect to refresh Session. 
     window.location = window.location.href; 
    } 
    function ResetTimers() { 
     clearTimeout(seconds); 
     SessionExpireAlert 
        } 

私はこの内の任意の提案のために幸せになります...

+0

したがって、アラートはアクティブなタブにのみ表示されますか?他の非アクティブなタブではどうなりますか? – Catalyst

+0

はい、ユーザーがタブ上でアクティブなので、他のタブはアラートを表示しません。ユーザーがすべてのタブで非アクティブになっている場合、アラートはすべてのタブで同じタイミングで同期的に表示されます。 – ManojK

答えて

0

、ユーザーセッションは、アプリケーションサーバによって保持されている場合、クライアント側のコード でこのタイプのコントロールを設定するのは良い方法ではありません(asp.netセッションタイムスタンプのようにサーバー側との制御や同期が非常に難しいためです)。

ウェブAPIを作成したり、signalRなどのライブラリで同期したりすると、現在のユーザー情報を取得する方がよいでしょう。ここでは、セッションタイムアウト値になります。

ユーザーがサイトの場所を変更するたびに、またはいつでもこのAPIを呼び出して値を取得し、これをタイマーとしてページに表示することができます。 もちろん、クライアントがセッションタイムスタンプを強制的にapi呼び出しでリセットすることもできます。

+0

提案していただきありがとうございますが、いくつかのサンプルリンクを私に提供してください。 – ManojK

+0

コードビハインドでWEBフォームを使用している場合は、 'セッション'変数を使用できます(もちろん、基本asp.net認証を実装する必要があります)。 例えば多くの同様の議論は、以下があります。 https://stackoverflow.com/a/20236481/5233057 あなたはタイムアウト値取得するために、「てsessionState」ドキュメントを参照してください:https://でMSDNを。 microsoft.com/en-us/library/h6bb9cz9(v=vs.100).aspx –

関連する問題