<machineKey decryptionKey ="AutoGenerate"...被IIS忽略.不会使以前会话的cookie无效

kam*_*ens 8 asp.net iis forms-authentication web-config global-asax

(有关更多背景,请参阅下面的问题):

是否有任何情况

<machineKey
      validationKey="AutoGenerate,IsolateApps"
      decryptionKey="AutoGenerate,IsolateApps"/>
Run Code Online (Sandbox Code Playgroud)

在web.config中,无法在App Pool上自动生成新的machineKey回收?这是我看到的行为......


我在MVC应用程序中使用标准的ASP.NET FormsAuthentication.如果我在使用中登录用户FormsAuthentication.GetAuthCookie并且不使用持久性cookie(依赖于浏​​览器的会话来记住我的授权状态),我希望回收IIS应用程序池以使会话对此cookie的了解无效......然后注销所有没有持久性cookie的用户.

这可能发生在我的一个IIS安装(XP)上,但在不同的IIS配置(服务器2K3)上,FormsAuthentication cookie(在标准名称".ASPXAUTH"下)仍然有效并继续授权用户.

有谁知道为什么会发生这种情况或什么配置控制这种行为?

显然,回收应用程序池无法控制浏览器是否仍然发送.ASPXAUTH cookie(只要我没有关闭浏览器并且cookie没有过期).

如果IIS安装在回收后正确拒绝身份验证,我可以Request.CookiesApplication_BeginRequest事件期间看到传入的cookie ...但是一旦控件移动到Global.asax.cs中可用的下一个事件(Application_AuthenticateRequest,cookie就被删除了来自Request.Cookies收藏.

为什么IIS/ASP.NET配置都不会发生这种情况?


如果不清楚,形成问题的更简单方法是:

为什么HttpContext.Current.Request.Cookies[".ASPXAUTH"]从改变{System.Web.HttpCookie}到零的时候我一步,在一个单一的要求,从Application_BeginRequestApplication_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)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

...然后在我回收IIS应用程序池之前的请求期间,不会捕获任何异常.回收IIS应用程序池后,当从浏览器发送完全相同的.ASPXAUTH cookie时,将捕获加密异常("填充无效且无法删除.")

为什么是这样?

Joh*_*ers -2

表单身份验证 cookie 与会话状态无关。