2012-04-27 3 views
18

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

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

Свойство кажется излишними, так как я нашел единственный способ для меня, чтобы упорствовать мои аутентификацию пользователей куков сеанса браузера, чтобы установить Expires свойства куки, созданной после создания в билете; даже если в билетах установлено значение Parsistent значение 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, разрешение на перекрестный браузер не работает.

ответ

9

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

редактировать: Я загрузил свой образец и заменить код печенья с

FormsAuthentication.SetAuthCookie(model.UserName, true); 

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

+0

Я чувствую, что я что-то упустил, cookie не сохранится, если я специально не установил поле cookie 'Expires'. Настройка IsPersistent не влияет. –

+0

Если вы установите IsPersistent в true, сгенерированный cookie будет иметь дату истечения срока + время ожидания формы. Это не ваше дело? – lnu

+0

Ну нет - если я удалю строку 'cookie.Expires = DateTime.Now.AddYears (1);' моя функция mem-login для входа не работает, хотя isPersistent установлен в true. –