(詳細については、以下の質問を参照してください):
状況はありますか
<machineKey
validationKey="AutoGenerate,IsolateApps"
decryptionKey="AutoGenerate,IsolateApps"/>
web.config では、アプリケーション プールのリサイクル時に新しい machineKey を自動生成できませんか? これは私が見ている動作です...
MVC アプリで標準の ASP.NET FormsAuthentication を使用しています。パーシスタント Cookie を使用してユーザーをログインさせた場合FormsAuthentication.GetAuthCookie
(承認された状態を記憶するためにブラウザーのセッションに依存している)、IIS アプリケーション プールをリサイクルすると、この Cookie に関するセッションの知識が無効になると予想されます。したがって、ログアウトします。永続的な Cookie を持っていないすべてのユーザー。
これは、私の IIS インストール (XP) の 1 つで発生しますが、別の IIS 構成 (サーバー 2K3) では、FormsAuthentication Cookie (標準名「.ASPXAUTH」の下) は有効なままであり、ユーザーの認証を続けます。
なぜこれが起こっているのか、またはこの動作を制御する構成を知っている人はいますか?
明らかに、アプリ プールをリサイクルしても、ブラウザーがまだ .ASPXAUTH Cookie を送信するかどうかを制御することはできません (ブラウザーを閉じておらず、Cookie の有効期限が切れていない限り)。
リサイクル後に認証を適切に拒否する IIS インストールの場合Request.Cookies
、イベント中に入ってくる Cookie を確認できますApplication_BeginRequest
が、制御が Global.asax.cs で利用可能な次のイベントに移動すると(Application_AuthenticateRequest
、Cookie は削除されます。Request.Cookies
コレクションから。
これが IIS/ASP.NET 構成の両方で発生しないのはなぜですか?
これが明確でない場合、質問を形成するより簡単な方法は次のとおりです。
単一のリクエストで から にステップすると、 から null に変わるHttpContext.Current.Request.Cookies[".ASPXAUTH"]
のはなぜですか?{System.Web.HttpCookie}
Application_BeginRequest
Application_AuthenticateRequest
その他のデバッグ情報:
次のコードを Global.asax.cs の FormsAuthentication_OnAuthenticate イベントに添付すると...
var cookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie != null)
{
var val = cookie.Value;
try
{
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(val);
}
catch (Exception)
{
}
}
...その後、IIS アプリケーション プールをリサイクルする前の要求中に、例外はキャッチされません。IIS アプリケーション プールをリサイクルした後、まったく同じ .ASPXAUTH Cookie がブラウザーから送信されると、暗号化例外がキャッチされます (「パディングが無効であり、削除できません。」)
どうしてこれなの?