使用ASP.NET MVC身份验证的“记住我”不起作用

时间:2009-02-05 00:04:28

标签: .net asp.net-mvc cookies membership

我有一个标准的ASP.NET MVC(RC Refresh)Web项目,带有标准的ASP.NET成员资格提供程序和项目模板中包含的Account控制器。

当我在登录表单中查看“记住我”时,我仍然没有被网站记住。 (Firefox记得我的用户名和密码,但我预计会发生的事情是自动登录)。

我是否必须手动设置和检查cookie?如果是这样,应该如何做到最好?

3 个答案:

答案 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);
            }
        }