2011-01-10 12 views
1

私のWebアプリケーションでは、Webページを表示するには、ユーザーがログインする必要があります。MVCユーザーログインとセッション

ユーザーがログインすると、後で取得するためにユーザー名とパスワードをセッションに保存します。これはすべて正常に動作しますが、私がプロジェクトを再実行すると、過去の認証をスキップしてそのアクションのコントローラにまっすぐに行くようです。

私が想定していることは、ユーザがログインしているのにセッションが更新されていないことを記憶しているということです。

このシナリオをトラップしてセッションを更新するにはどうすればよいですか?

答えて

2

これには多くの方法があります。

まず、Cookieを保持するかどうかを選択できます。しかし、セッションが期限切れになっておらず、プロジェクトを再コンパイルしても、例外が発生します。プロジェクトを再コンパイルすると、セッションの状態が破棄されます。

セッション状態でパスワードを入力するのが好ましい方法ではありませんが、私はあなたがそのようにする正当な理由があると確信しています。

ただし、このようにしたい場合は、Global.asaxのApplication_AuthenticateRequestイベントをオーバーライドできます。このイベントはリクエストが来るたびに発生し、リクエストが(HttpContext.Current.User.Identity.IsAuthenticatedを使用して)認証されているかどうかを確認し、セッションの状態を再入力できます。

ところで、なぜあなたはセッションの状態でユーザーのパスワードを保存する必要があるかを詳しく説明できますか?

+0

私はユーザー名とパスワードを知る必要があるため、ユーザー名とパスワードのメッセージ暗号化を使用してWCFサービスと通信します。これはWCFサービスのすべての呼び出しで使用されます。これを行うより良い方法があれば、私に知らせてください。 – Chris

+0

WCFでセッションを維持する方法がありますが、それ自体は推奨されません。私は一度同じシナリオに入っていましたが、ビジネスはセッション状態でパスワードを保存しないように指示しましたが、すべてのユーザーに「ユニバーサル」パスワードを作成して渡しました。これが理にかなってほしい! –

+0

ありがとうImran - 現在私たちのWCFサービスはMemberShipとRoleProviderであるため、すべての認証はそれを介して行われます。 – Chris

0

私が問題を正しく理解していれば、ベースアクションクラスを持ち、認証機構をそこに移動することができます。すべてのリクエストに対して、このベースが呼び出されるので、認証メカニズムがスキップされないようにすることができます。

関連する問題