为什么我的表单身份验证不会保持登录状态?

时间:2014-04-15 13:33:24

标签: asp.net asp.net-mvc forms-authentication

我在我的mvc项目上使用表单身份验证,似乎无论我做什么。您只能保持登录一天,然后需要您再次登录。

在我的web.config中,我将超时设置为以分钟为单位的一周。

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="10080" defaultUrl="/kpi" slidingExpiration="true" />
</authentication>

这就是我设置cookie的地方。

var cookie = FormsAuthentication.GetAuthCookie(account.UserName, account.RememberMe);
if (account.RememberMe)
    cookie.Expires = DateTime.Now.AddDays(7);
Response.Cookies.Add(cookie);
var returnURL = FormsAuthentication.GetRedirectUrl(account.UserName, account.RememberMe);
var hashData = Request.Form["HashHidden"];

2 个答案:

答案 0 :(得分:2)

每次IIS回收应用程序时,都会生成一个新的计算机密钥。您的身份验证票证使用该计算机密钥进行签名,因此在生成新的凭证时,将不再识别身份验证票证。您需要在web.config中设置静态机器密钥。

http://aspnetresources.com/tools/machineKey

答案 1 :(得分:0)

您需要使用FormsAuthentication.SetAuthCookie(username, persistent)设置http://msdn.microsoft.com/en-us/library/twk5762b(v=vs.110).aspx

来设置AuthCookie

并在web.config中设置正确的超时

  <system.web>
     <authentication mode="Forms">
             <forms timeout="10080" slidingExpiration="true"/>
     </authentication>
  </system.web>