4

フォーム認証を使用してASP.NETMVC3アプリを構築していますが、そのユーザーがログインしたときに、そのユーザーの既存のすべてのセッションをログアウトしたいと思います。異なるワークステーションの複数のユーザーがログインして、同じアカウント。

これを処理する標準的な方法はありますか?既存のセッションからログアウトするのは簡単ですが、同じアカウントで他のセッションをチェックしてログアウトする方法はありません。

これをハックする方法についていくつかのアイデアがありますが、IISまたはFormsAuthenticationAPIを使用してこれを行うための確立された方法があるかどうか知りたいです。

4

2 に答える 2

5

Webはステートレスであるため、次の要求を行うまでセッションを「ログアウト」することはできません(たとえば、セッションはCookieに保持されている可能性があります。これは、要求と応答の相互作用)。

セッション状態を使用していることを前提とした解決策はまだあります。できれば、「認証」を必要とするすべてのコントローラーに共通のベースコントローラーがあることをお勧めします。

ログインに成功したら、トークン(おそらくGUID)を生成し、それをセッションに保存します。また、これをユーザーIDでキー設定されたアプリケーション全体のストア(たとえば、データベースまたはアプリケーションコンテキスト)に書き込みます。

ベースコントローラーで(または、アクションフィルターを作成する必要があります)、セッション中のトークンを、アプリケーション全体のストアでユーザーIDに登録されているトークンと照合します。SignOut()一致しない場合は、標準の呼び出しを使用してユーザーをログアウトします。

于 2011-05-18T21:24:01.013 に答える
0

Membership.IsOnline以下に基づくプロパティを使用できますLastActivityDate

現在の日付と時刻からUserIsOnlineTimeWindowプロパティ値を引いた値が、ユーザーのLastActivityDateよりも前の場合、ユーザーはオンラインであると見なされます。

于 2011-05-18T16:35:26.387 に答える