0

次の詳細に従って、ログインするユーザーを制限する必要があるシナリオがあります。

500 人目のユーザーが私の Web サイトにログインしようとすると、「ユーザー ログインが超過しました。後でログインしてください!」というメッセージが表示されます。.

一度にログインできるのは 499 ユーザーのみです。500 番目のユーザーは管理者です。また、管理ページ ビューでオンライン ユーザーを表示する必要があります。では、ログインユーザー数を計算し、500 までに制限する方法を説明します。

aps.net C#に関連する回答を提供してください

4

6 に答える 6

2

これはアプリケーションのコンテキスト処理に適していると思います。

データベースに接続するためにリソースが浪費されるため、これらをMS sqlに保存しないでください。

最も簡単な方法は、シングルトン オブジェクトを作成して、オンライン ユーザー数に関するデータを保持することです。このオブジェクトは、Application_Start イベントでインスタンス化される場合があります

ログイン アクションが発生するたびに、オブジェクトをロックし、現在のユーザー数を更新してから、ロックを解放します。

于 2009-06-22T06:38:31.820 に答える
0

asp.net では、 というファイルを追加できますglobal.asax。このファイルには、 や などのアプリケーション レベルのイベントが含まSession_StartれていSession_Endます。これにより、データベースを使用しているかどうかにかかわらず、セッションの追跡が容易になります。

于 2009-06-21T11:14:14.310 に答える
0

データベースに現在ログインしているユーザーを追跡する必要があります。Sevは、それを達成する方法についていくつかの良いアイデアを提供しています。しかし、彼の回答へのコメントでも述べられているように、多くのユーザーは適切にログアウトせずに Web ページを閉じてしまうため、ユーザーが「ログアウト」ボタンをクリックしたときにログアウト済みとしてマークすることはできません。

したがって、ユーザーが非アクティブになってから数秒後にセッションを自動的に終了するセッション管理が必要です。

私のオンライン バンキング ソフトウェアでは、これは 90 秒または 120 秒程度 (より高いセキュリティ) であり、amazon.com では少なくとも数時間 (より優れたカスタマー エクスペリエンス) です。このタイムアウトを設定する時間は、アプリケーションの特定の要件によって異なります。

とにかく、これはかなり一般的な問題なので、すでにこれを実装しているフレームワークがいくつかあるはずです。

于 2009-06-21T11:19:56.200 に答える
0

PHP では、セッションが DB に保存されるようにセッションの動作を変更することでこれを行います。そうすれば、ログオンしている人数を大まかに把握できます。

ASPでこれを行う方法があると思います。

于 2009-06-21T10:47:57.543 に答える
0

優れたパフォーマンスの RDBMS (および優れたネットワーク) がある場合は、その情報をテーブルに登録できます...ただし、これが高価な場合は、サーバー側のテクノロジ (セッション、アプリケーションなど) に提供されているいくつかのクラスを使用するだけです。

JSではそれができません。その情報 (カウンター変数) をグローバルにどこに保存しましたか?

クライアントがサーバーに接続するたびに、すべての JS コードがリロードされるため、その情報を保存する方法がありません。

また、Cookie を使用する場合は、Cookie が使用されるクライアントに固有であることを覚えておいてください。

于 2009-06-21T11:00:20.453 に答える
0

これを実現するには、複数の方法があります。

DB 内のセッションは一方向です。ただし、これを使用して、サイトに何人の匿名ユーザーがいるかを知ることもできます.

探しているタスクを達成する別の方法は、「logged_in」などと呼ばれる新しいフィールドでユーザー テーブルのユーザーにフラグを設定することです。

login メソッドが実行されると、logout メソッドと同様に、それに応じてフラグが変更されます。次に、ユーザーがログインを試みるたびに SELECT クエリを実行して、現在ログインしている人数を確認し、それに応じて行動します。

より良い方法は、実行された「ログイン」または「ログアウト」メソッドに応じて、ログインしているユーザーの合計数を DB にカウントし、加算および減算することです。この方法では、どの特定のユーザーが特定の時点でログインしているかを知ることはできませんが、少なくとも必要な全体数は把握できます。ユーザー テーブル全体に対して SELECT クエリを実行する必要がないため、この方法の方が優れています。代わりに、DB から特定の 1 つのフィールドの値を取得して、パフォーマンスを向上させることができます。残念ながら、ユーザーが毎回ログアウトしない場合、ログイン時間を保存し、一定時間後にログアウトしない限り、この方法は役に立ちません。

ユーザーがブラウザーを閉じて「ログアウト」しない可能性があるという問題を解決するには、上記で提案した DB 構造を組み合わせてセッションを保存することをお勧めします。

于 2009-06-21T11:01:06.473 に答える