2013-12-12 88 views
2

我已经尝试了尽可能多的一切,但用户在很短的时间后仍然被注销。下面我包含了我的身份验证控制器和我的web.config。这大约是我的认证控制器的第30次迭代。我也尝试建立我自己的饼干无济于事。.NET Forms身份验证在超时之前注销用户

//Authentication Controller 

public ActionResult Index(Login login) 
    { 

     if(true)//if (ModelState.IsValid) 
     { 
      using (InVisionTicketContext data = new InVisionTicketContext()) 
      { 

       if (data.Logins.Count(l => l.Email == login.Email) >= 1) 
       { 
         var Login = data.Logins.Where(l => l.Deleted == false).SingleOrDefault(l => l.Email.ToLower() == login.Email.ToLower()); 
         if(string.IsNullOrWhiteSpace(Login.Password)) 
         { 
          ModelState.AddModelError("", "Invalid username or password."); 
          return View(); 
         } 


        if (PasswordHash.ValidatePassword(login.Password, Login.Password)) 
        { 

          FormsAuthentication.SetAuthCookie(Login.Email, true); 

         return RedirectToAction("Index", "Home"); 
        } 
       } 
      } 
     } 
     ModelState.AddModelError("", "Invalid username or password."); 
     return View(); 
    } 

-

//Web.Config 
<authentication mode="Forms"> 
     <forms loginUrl="~/Authentication" timeout="28800" slidingExpiration="true" cookieless="UseCookies" name="InvTicketCookie"/> 
</authentication> 
<sessionState timeout="28800" > 
</sessionState> 

enter image description here

回答

2

一个选项是设置在web.config中静态的machineKey,看看是否能解决问题。如果您的应用程序池由于某种原因而定期重新启动,并且自动生成的密钥不能被保留,那么您将得到此行为,因为ASP.Net将无法使用新密钥对票证进行解密。

您可以看到一个静态生成的机器密钥here的示例。

+0

会有一个很好的方式来记录应用程序池重启,看看是否是这个问题?您是否听说过这是GoDaddy等服务的问题? – Preston

+0

当然,您应该能够在Windows事件日志中看到它们,但是您也可以在Application_Start上以编程方式记录它们。同样值得注意的是,您拥有多个Web服务器,您需要一个静态机器密钥,否则您会得到类似的行为,因为来自用户的请求由Web服务器提供,而不是创建其身份验证凭据的服务器。 – Xander

+0

至于GoDaddy,如果你有一个共享的网络托管计划,我不会感到惊讶,但是,这是由于共同的网络托管的性质,而不是专门的GoDaddy。 – Xander

1

您正在创建两个Cookie,一个使用SetAuthCookie,另一个使用RedirectFromLoginPage。表单验证模块会感到困惑,并且只会使其中一个cookie过期。不幸的是,第二个迟早会过期的用户登出。

要么删除SetAuthCookie,要么如果你离开它,用Response.Redirect手动重定向。

+0

redirectFromLogin是新的,我今天就试过了,所以没有它,它仍然不能正常工作。 – Preston

+0

这是不幸的,你应该编辑你的问题,以反映这一点。 –

相关问题