C# ASP.NET 4.5永久性Cookie无法正常工作

C# ASP.NET 4.5永久性Cookie无法正常工作,c#,asp.net,.net,cookies,.net-4.5,C#,Asp.net,.net,Cookies,.net 4.5,我们有一个针对客户机的web表单项目,该项目保持“超时”,并在管理区域填写信息时定期注销用户。我们在上一个项目中遇到了类似的情况,但能够轻松解决这一问题: if (RememberMe.Checked) { FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket((string)r["Login"], true, (90*24*60)); string encryptedTicket = Forms

我们有一个针对客户机的web表单项目,该项目保持“超时”,并在管理区域填写信息时定期注销用户。我们在上一个项目中遇到了类似的情况,但能够轻松解决这一问题:

if (RememberMe.Checked)
{
    FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket((string)r["Login"], true, (90*24*60));
    string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
    cookie.Expires = authTicket.Expiration;
    HttpContext.Current.Response.Cookies.Set(cookie);
    Response.Redirect(FormsAuthentication.GetRedirectUrl((string)r["Login"], false), true);
}
else
{
    FormsAuthentication.SetAuthCookie((string)r["Login"], false);
    FormsAuthentication.RedirectFromLoginPage((string)r["Login"], false);
}
当我在新项目上尝试同样的方法时,没有任何效果。唯一的区别是(经过多次重写和调整后)新项目使用的是.NET4.5,而它使用的是.NET4.0。这是4.5中的一个bug吗?还有其他人遇到过吗


我们将新项目降级到4.0只是为了看看,到目前为止,它似乎工作得很好,没有任何额外的代码更改。我的大多数搜索结果都给出了一个代码示例,该示例看起来几乎与我正在做的完全相同。

如果其他人遇到相同的问题,我们在这里找到了解决方案:

因为该应用程序没有自己的machineKey,所以它从服务器的machine.config继承了machineKey。这一个配置为自动生成,因为它是针对多个客户共享的服务器的,如果他们共享同一个密钥,这将是一个主要的安全缺陷。但是,由于密钥是自动生成的,因此每次应用程序重置时它也会重新生成,并且无法解密以前分发的表单验证cookie

我需要为我的应用程序设置一个machineKey,所以我创建了一个密钥,并将其放入应用程序的web.config中的machineKey标记中,瞧,它成功了


它在旧站点上工作的原因可能是它具有相当稳定的通信量,并且可能没有空闲足够长的时间来重新生成机器密钥。但一旦我们在新网站上安装了机器钥匙,它就工作得很好:

谢谢!这帮我弄明白了为什么在应用程序池回收后,我的web应用程序没有读取我的持久cookie。真的很奇怪,没有人提到为了以后读取/解密持久cookie,必须设置非动态机器密钥。