2012-03-01 20 views
3

フォーム認証セッションをサーバーから無効にする良い方法はありますか?ログアウト後に有効なフォーム認証セッション

クッキーに有効期限が組み込まれていることを理解していますが、サーバーで追加のチェックを行い、ユーザーが手動でログアウトしていないことを確認します。ユーザーが手動でサインアウトすると、私はFormsAuthentication.SignOut()と呼ばれ、クッキーの有効期限が切れます。しかし、私が開発者ツールを使用して元の値に戻しても、私はまだログインしています。

チケットのUserData部分に「ログインID」を埋め込むことが考えられます。これは、各ログインがデータベースに記録され、それに関連付けられたIDがあることを意味します。ユーザーが手動でログアウトすると、データベースレコードを更新して、そのようにしたことを示すことができます。ただし、これは、ユーザーが認証されるたびにデータベースに照会する必要があります(理想的ではありません)。私はキャッシュを維持することができましたが、それはたくさんの作業であり、簡単な方法があることを望んでいたようです::)

ありがとう!

答えて

3

MSDN documents the limitations主なポイント:サーバー上の永続ストレージを使用して、ユーザーがWebサイトからログアウトしたときを記録します。

+0

正確には私が望んでいたものではありませんが、あなたは正しいと思います。ありがとう:) – dana

2

「ログインID」を保存する代わりに、ユーザーレコードの「ログインステータス」フィールドを更新することもできます。

ユーザーがログインするときに「loggedin」に設定します。 FormsAuthentication.SignOutと一緒に「loggedout」に設定しました。

次に、処理パイプラインの早い段階で、ユーザーレコードを取得します(おそらく後で必要になります)。フラグを確認します。フラグが "loggedout"の場合、何か問題があり、401(または認証の問題を示す別のコード)でリクエストを終了します。

もちろん、スライドの有効期限とSSLと一緒に短いクッキーの有効期限を使用してください。これにより、クッキーがあなた自身によってハイジャックされるのを防ぐことはできませんが、他人がそれを再利用するリスクは低くなります。

+0

ヒントのおかげで。ここでの欠点は、ユーザーが複数のブラウザーでログインしている場合(理論的には可能)、いくつかの厄介な動作が発生する可能性があることです。 – dana

関連する問題