在我的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没有被处理,它应该是。
答案 0 :(得分:4)
第一个也是最明显的问题是:您的浏览器中的Cookie 已启用吗?
您可以检查的是,无论是在web.config
,您是否已将<authentication>
部分配置为超时:
<authentication mode="Forms">
<forms loginUrl="~/login" timeout="60" />
</authentication>
如果你没有指定超时,它将使用30分钟的默认值,但是你可能将其设置为其他(无效)值吗?
timeout
属性:
指定cookie过期的时间(以整数分钟为单位)。
您还可以查看CookiesSupported
property(boolean
)以查看返回的内容。
答案 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>