在 MVC 4 中实现 RememberMe 功能时遇到了麻烦。
我从 Visual Studio 2012 创建了一个新的 MVC4 Internet 应用程序。这已经包括checkbox
登录页面上的 RememberMe。我假设它还包括所有必要的代码checkbox
。但事实并非如此。我还没有向这个 MVC4 应用程序添加一行代码。
我正在使用WebSecurity.Login
persistCookie:model.RememberMe
我的 web.config 说:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
然而经过这么多分钟,会话到期并且用户必须再次登录,即使我检查了 RememberMe checkbox
。我在之前的一篇文章中被告知,WebSecurity“自动为我处理”所有这些,但它不起作用。可能是我需要在某处添加额外的代码吗?或者我在 web.config 文件中的身份验证语句丢失某物?
我还尝试过在不同的测试应用程序版本中添加了特定的 cookie 语言:
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
int timeout = model.RememberMe ? 525600 : 30; // Timeout in minutes, 525600 = 365 days.
var ticket = new FormsAuthenticationTicket(model.UserName, model.RememberMe, timeout);
string encrypted = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
cookie.Expires = System.DateTime.Now.AddMinutes(52000); // timeout
cookie.HttpOnly = true; // cookie not available in javascript.
Response.Cookies.Add(cookie);
但这似乎不起作用,当我查看 cookie 值时,它说会话结束时过期。
帮助!这一直让我发疯。
更新: 一直在做一些测试,因为这仍然不起作用。
首先,我把上面所有的代码都注释掉了,cookies 还在发生。我很确定这是来自websecurity.Login
传递用户名、密码和 persistCookie: 的过程model.RememberMe
。所以我得到了两个 cookie ASPXAUTH 和 RequestVerificationToken 被保存。如果我检查了 Rememberme,则 ASPXAUTH 将在 1 年后到期checkbox
;否则它会在浏览会话结束时过期。
但是,当我在 40 分钟后回到该站点时,我已经退出了。当我单击登录时,我必须手动登录。这听起来像是一个愚蠢的问题,但我是否需要向登录控制器添加代码来检查 cookie 并自动记录此人?默认情况下似乎没有这种代码。再说一次,我不明白为什么微软会在视图中提供 RememberMe 选项,但不提供使其工作的代码。