1

通常、ログインが成功した後にセッションを設定することで、ログインしたユーザーを処理します。そのセッションは、リクエストごとにチェックされ、存在することが確認されます。

しかし、ユーザー アカウントを無効にして、現在ログインしている場合はどうでしょうか。その場合、ユーザーはセッションの有効期限が切れるまでシステムにアクセスできます。

現在、リクエストごとにデータベースからアカウント情報を取得し、ステータス フィールドをチェックしています。これは多くの不必要なオーバーヘッドだと思います。私のシナリオでは、アカウントとそれらのアカウント内のユーザーがあります。したがって、リクエストごとにアカウントのステータスとユーザーのステータスを確認する必要があります。

より良い方法はありますか?これはマルチサーバー環境であるため、SQL Server セッション状態を使用していることに注意してください。

前もって感謝します。

4

5 に答える 5

1

セッション開始時にセッション ID をデータベースに保存します。ユーザーを無効にするときは、データベースのユーザー セッション ID フィールドの値を削除するだけです。

セッション ID が、リクエスト時にデータベースに保存されているセッション ID と一致するかどうかを確認します。

そうでない場合は、session.abandon()。

于 2013-01-27T20:36:53.520 に答える
0

クッキーを使用できます!Cookie は最も強力な軽量データ ストレージです。暗号化されたユーザー名情報と状態 (アクティブ/非アクティブ) を Cookie に保存します。

于 2013-01-27T20:40:58.393 に答える
0

アプリケーションで有効になっている場合は、匿名識別を使用できます。

<anonymousIdentification enabled="true"/>

次のように取得できます。

string strId = Request.AnonymousID;

デフォルトは Guid です。

AnonymousId はユーザーごとに一意であり、ユーザーが IsAuthenticated かどうかを追跡します。

于 2013-01-27T22:10:19.893 に答える
0

ユーザー アカウントを無効にするときは、アカウントに関連付けられているセッションを削除しないでください。次に、ユーザーがサーバーにアクセスすると、セッションは存在しなくなり、ユーザーはアクセスできなくなります。

于 2013-01-27T20:29:47.620 に答える
0

リクエストごとにデータを保存する代わりに、最初のリクエストの後に のようなメソッドを実装できますAuthenticationManager.IsAuthorized("user name")。このメソッドは、次の 2 つの値を返す必要があります。

  • True/False (それぞれ承認されているかどうか)。
  • 列挙型の理由: UserBlocked、Timeout、...

したがって、すべてのリクエストでセッションがまだ有効かどうかを確認し、ユーザー データはセッションの開始ごとに 1 回取得されます。

于 2013-01-27T21:29:59.663 に答える