在Forms Authentication中实际超时之前注销的原因



我有一个asp.net MVC 3.0网站,托管在主网站的子域上。CCD_ 2版本被设置为CCD_。

表单身份验证设置如下:

<authentication mode="Forms">
<forms
cookieless="UseCookies"
defaultUrl="~/home"
enableCrossAppRedirects="false"
path="/"
requireSSL="false"
loginUrl="~/account/login"
protection="All"
timeout="120"
slidingExpiration="true"
name=".SubDomainAuthCookie"></forms>
</authentication>

但它每次都会在几分钟后将我注销主机管理员说这是可能是因为不正确的编码繁重的任务导致应用程序池重置,但这是一个简单的mvc网站,带有EF ORM。我不知道该怎么办!我应该寻找什么可能导致这种情况的原因?

更新:

检查Application_Start后,我发现这是问题,我记录了Application_Start(),结果是每当我被注销时,都会添加日志

12/6/2012 12:14:03 PM ==> Application started
12/6/2012 12:16:35 PM ==> Application started
12/6/2012 12:22:59 PM ==> Application started

奇怪,但真实。逻辑上没有什么复杂或沉重的东西!EF可能是问题所在吗?它是否会消耗大量内存/CPU,从而导致应用程序池重置?

  • 检查是否有其他应用程序使用name=".SubDomainAuthCookie"。这些应用程序可以覆盖其Cookie
  • 在登录页面中调用FormsAuthentication.RedirectFromLoginPage之前,您是否使用了FormsAuthentication.SetAuthCookie?如果没有,则可能是身份验证cookie设置不正确
  • 尝试记录global.asax.cs的Application_End,以了解您的应用程序是否回收过多。

    protected void Application_End(对象发送方,EventArgs e){/记录Application_End/}

    正如@ZippyV在下面的一个答案中所提到的,这背后的原因是IIS默认设置为自动生成一对密钥,用于解密和验证每个名为MachineKey的AppPool回收上的授权cookie内容(以及其他内容)。在这个问题中也提到

    更改此密钥后,所有浏览器上存储的授权cookie内容将不再可读,授权也将丢失。

    最简单的补救方法是在web.config 中使用静态MachineKey

  • 同时尝试将cookie设置为父域。点击此处了解更多信息。

当我的托管提供商过于频繁地回收我的网站进程时,我也遇到了这个问题。由于某些原因,由于加密/解密密钥发生更改,身份验证cookie变得无效。因此,您的网站无法再读取身份验证cookie。

您可以通过在web.config中指定密钥来解决此问题,这样托管提供商就不会更改密钥:

  1. 转到http://aspnetresources.com/tools/machineKey然后单击按钮
  2. 复制生成的标记
  3. 打开web.config文件并将生成的标记粘贴到<system.web>

您还需要设置登录时生成的cookie的过期时间。在形式上,你必须使用这个。

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, //Here Userinformation, DateTime.Now, DateTime.Now.AddDays(1), false, string.Empty);

在这里,我已经将cookie的过期时间设置为DateTime.Now.AddDays(1)(loggin date+1day),所以它太长了,将被登录。因此,创建的票证将在您登录后的第二天过期。

在Web.Config 中

<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>

现在很长一段时间你都可以登录了。

希望它能有所帮助!!!

请查看这些链接,以了解有关创建日志和过期时间的更详细说明。

http://www.hanselman.com/blog/WeirdTimeoutsWithCustomASPNETFormsAuthentication.aspx

http://codeasp.net/blogs/vivek_iit/microsoft-net/848/forms-authentication-timeout-vs-session-state-timeout

您检查过SessionState中的值吗?它的默认值是20分钟。您需要将其更新为相同或大于表单身份验证票证。

请在您的配置文件中添加/更新以下标记。

**<sessionState timeout="120" />**

最新更新