2

標準フォーム認証を使用する MVC 3 を使用して Web アプリを開発しています。共有ホスティングでホストされています。問題は、ユーザー認証状態が失われる場合があることです。私も例外ではありません。何が原因である可能性があるのか​​ 手がかりはありますか?

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

セッションは 20 分のタイムスパンの前に失われます。

4

2 に答える 2

4

ここでいくつかのことが頭に浮かびます。

  1. 認証が失われるパターンはありますか?つまり、それは常に20分後ですか、それとも本当にランダムに見えますか?

  2. 共有ホスティングを利用しているので、web.configでマシンキーを明示的に設定していますか?そうせず、自動生成に設定されている場合、アプリケーションの負荷分散が行われていると、キーが異なります。したがって、サーバーAで認証し、その後の要求がサーバーBに送信されると、アプリケーションは認証Cookieをデコードできなくなり、「キックアウト」されます。

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

その2番目のビットの詳細については、ここを参照してください。

于 2012-04-16T18:29:35.987 に答える
0

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

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

于 2012-04-16T15:28:02.917 に答える