在MVC 4中实现RememberMe功能时遇到了麻烦。
我从Visual Studio 2012创建了一个新的MVC4 Internet应用程序。这包括登录页面上的RememberMe checkbox
。我假设它还包含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值时,它表示会话结束时到期。
帮助!这让我很疯狂。
更新 正在进行一些测试,因为这仍然不起作用。
首先,我注释掉上面的所有代码, Cookie仍在发生。我很确定这是来自websecurity.Login
进程,它传递了用户名,密码和persistCookie:model.RememberMe
。所以我得到两个保存的cookie ASPXAUTH和RequestVerificationToken。如果我查看Rememberme checkbox
,ASPXAUTH将从该日期起1年后到期;否则它会在浏览会话结束时过期。
然而,当我40分钟后回到网站时,我已经退出了。当我单击“登录”时,我必须手动登录。这可能听起来像一个愚蠢的问题,但我是否需要向登录控制器添加代码以检查cookie并自动登录该人?默认情况下似乎没有这种代码。而且,我不明白为什么微软会在视图中提供RememberMe选项,但不提供使其工作的代码。
答案 0 :(得分:0)
你的片段的第一行是可能的罪魁祸首。它会在您的Web配置中没有滑动过期时发布表单cookie。
然后,您手动发出cookie,它会将两个表单cookie发送到客户端。不幸的是,第一个导致用户退出。
注释掉第一行,剩下的代码似乎没问题。