Постоянный вход в mvc.net

Я работаю над постоянным входом в приложение MVC.net, я пытался использовать IsPersistent = true в FormAuthantication, но если я перезапущу iis, он выйдет из системы. Ниже приведен код, который отвечает за вход в систему.

public void SetLoginData(UserLoginInfo userLoginInfo)
        {
            HttpContext .Current.Session[SessionUserEmailIdKey] = userLoginInfo.Email;
            HttpContext.Current.Session[SessionWelcomeNameKey] = userLoginInfo.FirstName;
            HttpContext.Current.Session[SessionWelcomeRegistrationIdKey] = userLoginInfo.RegistrationId;

            HttpContext.Current.Session[SessionLoginInfoKey] = userLoginInfo;
            const bool isPersistent = true;
            const string userData = "user";

            var ticket = new FormsAuthenticationTicket(1,
                                                       userLoginInfo.RegistrationId.ToString(
                                                           CultureInfo.InvariantCulture),
                                                       DateTime.UtcNow,
                                                       DateTime.UtcNow.AddMinutes(180),
                                                       isPersistent,
                                                       userData,
                                                       FormsAuthentication.FormsCookiePath);

            string encTicket = FormsAuthentication.Encrypt(ticket);
            HttpContext.Current.Request.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
            HttpContext.Current.Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
        }

пожалуйста, скажите мне, как я могу реализовать вход в систему, чтобы даже при перезапуске приложения пользователи не выходили из системы.


person rajansoft1    schedule 08.01.2014    source источник
comment
Эй, не могли бы вы прислать мне пример для GetLoginData, пожалуйста. Благодарность   -  person Trương Quốc Khánh    schedule 25.08.2020


Ответы (1)


Чтобы создать бессрочные логины, вам нужно убедиться, что две вещи на месте (поскольку вы используете FormsAuthentication).

Во-первых, убедитесь, что время истечения срока действия вашего билета установлено в будущем.

 = new FormsAuthenticationTicket(1,
        userLoginInfo.RegistrationId.ToString(CultureInfo.InvariantCulture),
        DateTime.UtcNow,
        DateTime.UtcNow.AddYears(20),
        isPersistent,
        userData,
        FormsAuthentication.FormsCookiePath);

Во-вторых (и, скорее всего, почему пользователей выкидывает с сайта при перезагрузке IIS) является создание раздела machineKey в файле web.config с набором статических пар ключей. По умолчанию IIS автоматически создает ключ машины для каждого приложения. Это то, что используется для шифрования/дешифрования ваших билетов проверки подлинности форм. Если IIS перезапустится, вы, скорее всего, получите новый машинный ключ в этом экземпляре, а это означает, что билет не может быть расшифрован .... это означает, что пользователь должен снова войти в систему. Создавая/определяя статический ключ, вы можете предотвратить изменение ключа при перезапуске IIS. Информацию о настройке ключа компьютера можно найти в MSDN. здесь.

Наконец, проверка подлинности с помощью форм НОЛЬ связана с сеансами и управлением сеансами. Они взаимоисключающие и не влияют друг на друга в типичных сценариях. Когда пользователь входит в систему, ему предоставляется зашифрованный файл cookie, содержащий время истечения срока действия и имя пользователя. Это НЕ сохраняется в сеансе, поэтому изменение настроек сеанса не повлияет на вход пользователей в систему.

person Tommy    schedule 08.01.2014