我有一个标准的ASP.NET MVC(RC Refresh)Web项目,带有标准的ASP.NET成员资格提供程序和项目模板中包含的Account控制器。
当我在登录表单中查看“记住我”时,我仍然没有被网站记住。 (Firefox记得我的用户名和密码,但我预计会发生的事情是自动登录)。
我是否必须手动设置和检查cookie?如果是这样,应该如何做到最好?
答案 0 :(得分:17)
您需要将true / false传递给SetAuthCookie方法。
public ActionResult Login (string email, string password, bool rememberMe, string returnUrl)
{
// snip
FormsAuth.SetAuthCookie(username, rememberMe); // <- true/false
// snip
}
并确保bool rememberMe
反映登录页面上复选框的状态。
答案 1 :(得分:3)
您需要在控制器方法中生成持久性cookie,以便在选中“记住我”框时处理登录。如果您使用RedirectFromLoginPage
,请将createPersistentCookie参数设置为true
。
答案 2 :(得分:2)
这三种方法帮助我坚持了一个cookie。
注意,如果用户取消选择&#34;记住我&#34;,您将要删除该Cookie。
private const string RememberMeCookieName = "MyCookieName";
private string CheckForCookieUserName()
{
string returnValue = string.Empty;
HttpCookie rememberMeUserNameCookie = Request.Cookies.Get(RememberMeCookieName);
if (null != rememberMeUserNameCookie)
{
/* Note, the browser only sends the name/value to the webserver, and not the expiration date */
returnValue = rememberMeUserNameCookie.Value;
}
return returnValue;
}
private void CreateRememberMeCookie(string userName)
{
HttpCookie rememberMeCookie = new HttpCookie(RememberMeCookieName, userName);
rememberMeCookie.Expires = DateTime.MaxValue;
Response.SetCookie(rememberMeCookie);
}
private void RemoveRememberMeCookie()
{
/* k1ll the cookie ! */
HttpCookie rememberMeUserNameCookie = Request.Cookies[RememberMeCookieName];
if (null != rememberMeUserNameCookie)
{
Response.Cookies.Remove(RememberMeCookieName);
rememberMeUserNameCookie.Expires = DateTime.Now.AddYears(-1);
rememberMeUserNameCookie.Value = null;
Response.SetCookie(rememberMeUserNameCookie);
}
}