2012-04-16 15 views
2

標準フォーム認証を使用しているMVC 3を使用してWebアプリケーションを開発しています。これは共有ホスティングでホストされます。問題は、ユーザーの認証状態が失われることがあることです。私は全く例外がありません。何が原因なのか何か手がかりはありますか?ASP MVC 3:プロダクションで時々認証が失われる

認証はセッションと関連がありますか?私はSessionオブジェクトをまったく使用していません。 クッキーを使用した認証が負荷分散環境で動作できるという印象を受けました。私が間違っている?

セッションは20分の時間が経過する前に失われます。

+0

これはあまり進んでいません。おそらくアプリケーションプールは何らかの理由でリサイクルされていますか? – mgnoonan

答えて

3

物事のカップルは、ここに頭に浮かぶ:

  1. は、失われた認証のいずれかのパターンがありますか?意味は、それはいつも20分後ですか、それとも本当に一見ランダムですか?

  2. 共有ホスティングになっているので、あなたのマシンキーを明示的にweb.configに設定していますか?そうしないと自動的に生成するように設定されている場合、アプリケーションが負荷分散されている場合、キーは異なります。したがって、あなたは、サーバーAに認証し、いくつかの後続の要求がサーバBに行き、あなたのアプリケーションは、認可クッキーと「キックあなたを」Webファームで

をデコードすることはできません、あなたはどの保証することはできませんサーバは 連続リクエストを処理します。 1つのサーバーでユーザーが認証され、次の要求が別のサーバーに送信されると、 は認証に失敗し、ユーザーの再認証が必要になります。 machineKey要素 の validationKey属性とdecryptionKey属性は、フォーム認証 チケットのハッシュと暗号化に使用されます。これらの属性のデフォルト値は AutoGenerate.IsolateAppsです。これらのキーは、それぞれ アプリケーションごとに自動生成され、各サーバーで異なります。したがって、1つのコンピュータで暗号化された 認証チケットは、Webファーム内の別のコンピュータで 、または同じWebサーバー上の別のアプリケーションで復号化および検証できません。この問題に対処するには、 validationKeyとdecryptionKeyの値が、Webファーム内のすべての コンピュータで同一である必要があります。

この2番目のビットはhere for more informationです。

+0

ありがとうございます。私は今、マシンのキーを設定し、それは正常に動作します。あなたは私の日を救った: –

+0

素晴らしい - それを聞いてうれしい! – Tommy

+0

@ Tommy: "Webファームでは、どのサーバーが連続した要求を処理するかを保証することはできません。 - ここでスティッキセッションがオプションになるのではないでしょうか ? –

0

セッションがタイムアウトしました。セッションを過ぎると、セッション(および認証)が破棄されます。

あなたはタイムアウトをweb.configから増やすことができます。これは私が行ったやり方です。ダミーページをAJAXで数分ごとにpingすることができます。後者の利点は、リソースを使用して30分間そこに留まり、Application_OnExitが実行されないようにするのとは対照的に、ユーザーがブラウザを閉じるときにセッションが適時に終了することです。

+0

認証はセッションと関連していますか?私はSessionオブジェクトをまったく使用していません。 –

+0

認証IDはセッションオブジェクトに保持されます(yes)。 – Blindy

+0

Nopeセッションとフォーム認証は相互に排他的です。認証情報は通常、暗号化されたCookieに格納され、各リクエストとともにアプリとの間でやりとりされます。詳細はこちらをご覧ください:http://msdn.microsoft.com/en-us/library/ff647070.aspx – Tommy

関連する問題