2012-01-27 4 views
1

これはASP.Netアプリケーションのコンテキストです。アプリケーションは、ページに設定された特定のデータを使用します。このデータが設定されると、このページ以降のすべての操作が設定されたデータを使用します。新しいブラウザウィンドウを開くユーザの検出/停止方法は?

問題は、競合するデータで別のタブを開くと、同じセッションと同じユーザーの古いデータを上書きして、最初のタブの操作を無効にするということです。

私はこのようなカップリングを削除するコードをリファクタリングすることを推奨しますが、これは不可能です。ここでこれについて説明した他のスレッドがありますが、コードのリファクタリング以外の解決方法は指定されていません(http://stackoverflow.com/questions/632062/ways-to-detect-ctrl-n-or-when-a-user-opens

したがって、javascript/Jqueryを介して別のタブを開くことをユーザーが検出(およびユーザーに通知)したり、ユーザーを停止するにはどうすればよいですか。

答えて

1

セッション変数isActiveを設定して、ユーザーが最初にアプリケーションを開くときに他のすべてのセッションデータとともにtrueに設定することができます。その後、ユーザーが別のタブを開いた場合は、isActiveがtrueであるかどうかを確認します。そうであれば、ユーザーに通知し、データを再度設定しないでください。擬似コードで

、あなたのロジックは、ユーザーがセッションを設定するためのページを訪問していない保証がないため、これは一時的にJavascriptをオフにし、その後、よりよい解決策になるこの

if (!isActive) 
    //set session data 
else 
    //alert the user: You have another active session 

のように流れるべき通知されなくても新しいタブを起動できます。

+0

ユーザーが別のタブを開いているかどうかを確認するにはどうすればよいですか? –

+0

@SidharthPanwar:いいえ。私のソリューションを実装する場合、あなたは知る必要はありません。 – xbonez

+0

あなたが提供したコードはどこに保管しますか?どのようなイベントで発射するのですか? –

1

同じユーザーが複数のページを同じサイトで開くことを防ぐことはできません。ユーザーは、同じコンピュータ上の複数の異なるブラウザまたは異なるコンピュータ上のブラウザを使用して、常にこのような操作を行うことができます。そのため、本当に必要なのは、この状況を適切に処理するか、またはそのような競合を検出し、発生時に最も安全なアクションを決定するためにアプリケーションを設計することです(サーバーでは、 1つまたは複数のすべてのセッションからのデータは、それらをすべて一緒にマージします)。安全な行動は、データの内容やデータの変更内容によって異なります。

最も簡単なオプションは、ユーザーが訪問するたびに新しいサーバーベースのセッションをコインにして、サーバーですべての以前のセッションを無効にすることです。無効なセッションのために拒否されます。これにより、マルチセッションデータの競合が防止されます。

セッションが無効になったときにユーザーに通知できるようにするには、ウィンドウが開いている間はサーバーの遅いポーリング(20分ごとに1回)を行い、セッションの期限が切れたときにユーザーに通知できるように、セッションの有効性を確認します。

+0

+1賢明な返信:) –

関連する問題