1

私が使用しているアプリケーションは、jqueryを使用してセッションタイムアウトプロンプトを実装しています。カウントするタイマーがあり、事前定義されたX分後にユーザーアクティビティがない場合は、ユーザープロンプトが表示されます

(セッションはまもなく終了します...続行またはログアウト)。

ここにあるアプローチを使用します-http://www.codeproject.com/Articles/227382/Alert-Session-Time-out-in-ASP-Net

ただし、ユーザーが新しいタブを開いた場合、これは機能しません。

1)ユーザーがログインすると、タイマーはユーザーの非アクティブのカウントを開始します。

2)ユーザーが新しいウィンドウで開くリンクをクリックします(たとえば、この場合、実行中の長いレポートです)。2番目のタブがアクティブで、いくつかの応答があります(セッションを終了しないクロスバック/ポストバック)。

3)2番目のブラウザタブがアクティブです。セッションを終了しないアクティビティがいくつかあります。

4)ただし、最初のブラウザタブは非アクティブであり、カウンタはセッションを閉じる必要があると「考えています」。適切なメッセージが表示され、ユーザーがログアウトします。

これは私たちが望んでいることではありません。したがって、特定のアプローチはセッションタイムアウトの修正にすぎませんが、ユーザーが別のタブでアクティブになっている場合、アプリケーションはとにかくユーザーをログアウトします。それは望ましいことではありません。レポートページがあります。新しいタブ/ウィンドウでレポートを開くように機能します。そして、それはかなり長く実行される可能性があります。レポートセクションはいくつかのコールバックを処理するため、セッションはこのタブで終了しません。ただし、2番目のタブで終了します。

編集: 私は次の解決策を持っています:「JavascriptCookieを保存し、それをチェックして、セッションが別のタブで拡張されているかどうかを確認しますか?」私はまだこれを理解しようとしています。

4

1 に答える 1

2

LocalStorageの概念を使用して、最後のアクティビティ時間を節約できます。

いずれかのタブに保存すると、他のタブからもアクセスできるようになります...

これは、最新のすべてのブラウザでサポートされています。

例:

アクティビティが検出されたら、以下を使用します。

localStorage['lastActivity'] = new Date();

あなたがそれをチェックしたいとき:

var lastActityTime = localStorage['lastActivity'];

于 2012-12-13T11:26:31.983 に答える