2012-02-22 16 views
2

私はASPの初心者で、最悪の開発者の悪夢に遭遇しました:私は解雇されたワーカーの巨大なASP.NETプロジェクトを受け取りました。変更の1つは、1つのActive Directoryログイン(別のタブ、ブラウザなど)で同じサイトを何度も開くのを防ぐことです。 私はアプリがセッションを使用していることに気付きました。任意のアイデアは、同じサイトの複数のインスタンスを防ぐためにセッションを使用するには?ASP.NET:同じサイトを数回並列に開くのを防ぐにはどうすればいいですか?

+5

er ....なぜあなたはインターネットの仕組みを破るだろうか? **複数のブラウザセッションを持つユーザーを阻止しようとしないでください。あなたのアプリを修正! –

+0

セキュリティ上の理由から必要なものはunfortunatelly:/ –

+0

"セキュリティ上の理由から" ...セキュリティに間違っているような音がします。失敗しないようにビルドしないでください。 – snemarch

答えて

1

ここにアイデアがあります。 GUIDを持つ隠しフィールドは、ページロードごとにサーバーによってランダムに生成されます。要求がサーバに到着すると、前回生成されたGUIDが来るかどうかがチェックされます。それが異なっているか空である場合(セッションが生きている間) - アクセスが拒否されたことを示すページにリダイレクトします(新しいGUIDはここにありません)。それが正しければ、要求されたページを提供する。この小さな問題は、誰かがブラウザを閉じてもう一度開いた場合、再びアプリケーションを使用しようとするとアクセスが拒否されることになります。セッションタイムアウトを1分に下げ、AJAX asp:Timerを使用してセッションを有効に保つ必要があることを最小限に抑えるために、キープアライブコール(およびその他のAJAXコール)をGUID生成/検証パイプラインから除外することを忘れないでください。もちろん、セッションの終了はプロセスをリセットします。また、ユーザーが適切にログアウトしてもらうことをお勧めします。

これは、永続的な接続よりも保護レベルが弱いですが、実装するのは比較的簡単なソリューションです。ただし、技術的ではないエンドユーザーには十分であるはずです - あなたの「聴衆」に依存します。しかし、その仕組みを知っている人にとっても、アプリケーションの2つの「インスタンス」を使うのは難しいでしょう。

本当に必要な場合は実行してください。一般的に私はMarcに同意します.Webアプリはこのように制限されるべきではありません。たぶんそれは教育を受けることができる人からの要件ですか?

1

各ページから永続的な接続を作成するだけで済みます。ブラウザが1つのタブでページ間を移動すると、常時1つの永続的な接続が確立されます。同じユーザーから2つの並列永続接続を取得すると、ユーザーは新しいタブを開きました。

マスターページのフッターで、応答を終了しないページ(長いポーリングのような)でサーバーにajax呼び出しを行うスクリプトを追加します。最後のものが接続されている間に別のajax呼び出しが同じユーザーから来た場合、これは第2のタブです。

永続的な接続のためにSignalRをチェックアウトするとよいでしょう。 Webソケットを切り替えるか、ブラウザー機能に基づいて長いポーリングを行うことができるはずです。

0

複数のブラウザまたはタブで一度にURLが読み込まれるのを防ぐことはできません。これは、クライアントが開始したプロセスなので、一度に読み込まれません。

一度に1つのブラウザウィンドウしかアクティブにならないように、(Hasan Khanの示唆したように)永続的な接続を実装できます。私は、新しいウィンドウが開かれたときに、すでに開いている接続があることをユーザーに警告することができると付け加えます。彼らが新しい接続を使用することを選択した場合、古い接続(別のブラウザ、タブなど)にメッセージを送信し、そのブラウザのウィンドウを消去します。

関連する問題