«Запомнить меня» с ASP.NET MVC Аутентификация не работает - PullRequest
14 голосов
/ 05 февраля 2009

У меня есть стандартный веб-проект ASP.NET MVC (RC Refresh) со стандартным поставщиком членства ASP.NET и контроллером учетных записей, включенным в шаблон проекта.

Когда я отмечаю «Запомнить меня» в моей форме входа в систему, меня все равно не запоминает сайт. (Firefox запоминает мое имя пользователя и пароль, но я ожидал, что произойдет автоматический вход в систему).

Нужно ли устанавливать и проверять cookie вручную? Если да, то как это лучше всего сделать?

Ответы [ 3 ]

17 голосов
/ 05 февраля 2009

Вам необходимо передать true / false в метод SetAuthCookie.

public ActionResult Login (string email, string password, bool rememberMe, string returnUrl)  
{

    // snip

    FormsAuth.SetAuthCookie(username, rememberMe); // <- true/false

    // snip
}

и убедитесь, что bool rememberMe отражает статус флажка на странице входа в систему.

3 голосов
/ 05 февраля 2009

Вам необходимо создать постоянный файл cookie в методе контроллера, который обрабатывает вход в систему, когда установлен флажок «Запомнить меня». Если вы используете RedirectFromLoginPage, установите аргумент createPersistentCookie на true.

2 голосов
/ 27 июля 2015

Эти 3 метода помогли мне сохранить cookie.

Обратите внимание, что если пользователь отменит выбор "Запомнить меня", вы захотите удалить 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);
            }
        }
...