mvc记得我在Visual Studio 2012中开箱即用

时间:2013-06-05 15:34:45

标签: c# asp.net-mvc asp.net-mvc-4

在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选项,但不提供使其工作的代码。

1 个答案:

答案 0 :(得分:0)

你的片段的第一行是可能的罪魁祸首。它会在您的Web配置中没有滑动过期时发布表单cookie。

然后,您手动发出cookie,它会将两个表单cookie发送到客户端。不幸的是,第一个导致用户退出。

注释掉第一行,剩下的代码似乎没问题。