Подтвердить что ты не робот

Какова цель свойства FormsAuthenticationTicket isPersistent?

Я пытаюсь склонить голову к цели свойства isPersistent, найденного в классе FormsAuthenticationTicket. http://msdn.microsoft.com/en-us/library/kybcs83h.aspx

  • Существуют ли сценарии при настройке isPersistent?
  • В каких сценариях я хочу установить isPersistent в true и false?

Свойство кажется избыточным, так как я нашел единственный способ сохранить сохранение cookie моих пользователей в сеансах браузера, чтобы установить свойство Expires файла cookie, созданного после создания билета; даже если для билета значение PERistent установлено значение false.

Я также обнаружил, что установка истечения билетов (а не файла cookie) на что-то вроде 10 секунд при isPersistent, установленном в true, мало влияет; билет истекает через 10 секунд.

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
    identity.Name,
    DateTime.Now,
    DateTime.Now.AddMinutes(FormsAuthentication.Timeout.TotalMinutes),
    isPersistent,
    JsonSerializerService.ToJson(identity),
    FormsAuthentication.FormsCookiePath);

string encryptedTicket = FormsAuthentication.Encrypt(ticket);

var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);

cookie.Path = FormsAuthentication.FormsCookiePath;

cookie.Expires = DateTime.Now.AddYears(1); // good for one year

Я ценю, что я могу изменить свой код выше, чтобы установить Expires

if (isPersistent)
    cookie.Expires = DateTime.Now.AddYears(1); // good for one year

Создано примерное приложение @GitHub. https://github.com/chrismoutray/AuthSample В основном это показывает, что даже установив флаг isPersistent в true, разрешение на перекрестный браузер не работает.

4b9b3361

Ответ 1

В рамках 1.0/1.1 установка IsPersistent в true установила истечение 50 лет для файла cookie.
В версии 2.0 он был изменен, поэтому истечение срока действия файла cookie соответствует атрибуту тайм-аута проверки подлинности. Таким образом, вы можете установить IsPersistent в true, но cookie всегда истекает после периода ожидания аутентификации формы.
Ваш код делает трюк, если вы хотите длительный срок действия без изменения времени ожидания проверки подлинности форм.

edit: я загрузил ваш образец и заменил ваш код файла cookie на

 FormsAuthentication.SetAuthCookie(model.UserName, true);

И он работает как ожидалось: с двумя днями, настроенными как ваш тайм-аут формы, мой файл cookie истечет через два дня.