Какова цель свойства 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, разрешение на перекрестный браузер не работает.
Ответы
Ответ 1
В рамках 1.0/1.1 установка IsPersistent в true установила истечение 50 лет для файла cookie.
В версии 2.0 он был изменен, поэтому истечение срока действия файла cookie соответствует атрибуту тайм-аута проверки подлинности. Таким образом, вы можете установить IsPersistent в true, но cookie всегда истекает после периода ожидания аутентификации формы.
Ваш код делает трюк, если вы хотите длительный срок действия без изменения времени ожидания проверки подлинности форм.
edit: я загрузил ваш образец и заменил ваш код файла cookie на
FormsAuthentication.SetAuthCookie(model.UserName, true);
И он работает как ожидалось: с двумя днями, настроенными как ваш тайм-аут формы, мой файл cookie истечет через два дня.