FormsAuthentication.SetAuthCookie问题

时间:2011-04-18 12:24:57

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

在我的MVC 3应用程序中,我有一个非常基本的控制器

[HttpPost]
public ActionResult SignIn(LogonModel logonModel)
{
    string logonMessage;
    if(_authenticationService.Login(logonModel.UserName, logonModel.Password, 
        out logonMessage))
    {
        FormsAuthentication.SetAuthCookie(logonModel.UserName,true);

        return RedirectToAction("Index", "Home");
    }

    return View();
}

我看到cookie已在浏览器中设置,但是当我关闭浏览器并返回该站点时,它并没有自动登录。它几乎就像cookie没有被处理,它应该是。

3 个答案:

答案 0 :(得分:4)

第一个也是最明显的问题是:您的浏览器中的Cookie 已启用吗?

您可以检查的是,无论是在web.config,您是否已将<authentication>部分配置为超时:

<authentication mode="Forms">
    <forms loginUrl="~/login" timeout="60" />
</authentication>

如果你没有指定超时,它将使用30分钟的默认值,但是你可能将其设置为其他(无效)值吗?

timeout属性:

  

指定cookie过期的时间(以整数分钟为单位)。

您还可以查看CookiesSupported propertyboolean)以查看返回的内容。

答案 1 :(得分:3)

如果使用MVC 5 +,请务必从web.config中删除以下<modules>标记

<system.webServer>
<modules>
  <remove name="FormsAuthentication" />
</modules>
</system.webServer>

答案 2 :(得分:0)

我遇到了认证部分中域名错误的情况:

  <authentication mode="Forms">
      <forms name="yourAuthCookie" loginUrl="/user/login" protection="All" path="/" enableCrossAppRedirects="true"  timeout="90" domain="WRONGDOMAIN.COM" />
    </authentication>

删除域名就行了:

  <authentication mode="Forms">
      <forms name="yourAuthCookie" loginUrl="/user/login" protection="All" path="/" enableCrossAppRedirects="true"  timeout="90"  />
    </authentication>