0

C# Visual Studio 2008 および SQL Server 2005 を使用。

  • 1 つのデータベース サーバー。

  • 1 つの Web サーバー

  • 3 つのクライアント

  • ウェブページ名はalpha. サイト名はmysite.

一度に 1 人のクライアントだけがページを表示できるようにしたいalpha。1 人がページを表示していて、別のコンピューターから別のユーザーが同じページを表示しようとすると、アクセスは拒否されます。

特定のページに接続するコンピューターを制限するように IIS を構成する方法はありますか?

このクラスのインスタンスが 1 つだけ作成され、別のインスタンスが ERROR を作成しようとしたときに、静的クラスを使用してこれを達成することは可能ですか?

これを達成する方法は?

ページ数が多いのでご注意ください。このページでの閲覧を制限したいだけです。

4

5 に答える 5

4

ページの更新と同じブラウザで別のタブを開いていることを区別できないため、そのようなスキームを機能させる方法がわかりません。

なぜこれが必要なのですか?おそらく、より良い他の選択肢がありますか?

于 2010-06-20T21:13:17.780 に答える
3

あなたが説明したように組み込みの制限はありません。静的クラスが何を支援するのかわかりません。

アプリケーション変数を使用して、最初のクライアントの IP アドレスとある種のタイムアウトを保存し、この方法で保護するページでこれを設定/チェックします。

于 2010-06-20T19:51:48.273 に答える
2

簡単な答えは次のとおりです。これはできないと思います。

それほど短くない答えは次のとおりです。 をチェックすることで、要求がどのコンピューター/IPアドレスから発信されたかを確認しRequest.UserHostAddress、このIPアドレスを一時的に「どこかに」保存して、同じIPアドレスにページが再度表示されないようにすることができます。しかし、このようなアプローチにはいくつかの問題があります。

  • いつか「アクティブな」クライアント IP アドレスのリストをクリアする必要があります
  • ファイアウォール/プロキシ/などの背後にある場合、異なるユーザー/コンピューターを区別することはできません (それらはすべて、Web アプリに同じ IP アドレスを表示します)
于 2010-06-20T21:17:38.650 に答える
1

理論上は可能だと思います。

これは、認証 + Cookie + JavaScript で行うことができます。

認証を使用してユーザーをログインさせ、どのページが提供されたかのユーザーごとのステータスを維持します。そのブラウザーに Cookie を設定して、再度ログインする必要がないようにします。

これでおそらく、JavaScript で onUnLoad イベント (または AJAX をキープアライブ + タイムアウト時に DOM を消去するなど) を使用して、そのユーザーの特定のページのステータスをクリア (または維持) することができます。

ユーザーがページを要求するたびに、ログインしてそのページを開いているかどうかを確認します。ステータスに彼が開いていると表示されている場合は、同時表示を拒否できます。彼が別のブラウザを使用している場合は、Cookie が見つからないなどの理由で、再度ログインするよう求めることができます。

もちろん、他の制約により、これを使用できない場合があります。

免責事項:私は自分で試したことはありませんが、これを回避する方法があるかもしれません.

于 2010-06-20T21:39:49.480 に答える
0

これを行う非効率的な方法は、各ユーザーの IP と現在のページをデータベースに入れてから、その IP による後続のすべてのリクエストに対してデータベースに対してクエリを実行することです。アンロードされたページをデータベースから削除する onUnload イベントを各ページに追加します。

于 2010-06-21T05:52:52.007 に答える