Вопрос по c#, authentication, asp.net – Какова цель свойства isPersistent для FormsAuthenticationTicket?

19

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

Are there scenarios when setting isPersistent works? In what scenarios would I want to set isPersistent to true and false?

Это свойство представляется избыточным, поскольку я обнаружил, что единственный способ сохранить файлы cookie для аутентификации пользователей в сеансах браузера - это установитьExpires свойство файла cookie, созданного после создания заявки; даже если в параметре tickets isPersistent установлено значениеfalse.

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

<code>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
</code>

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

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

Пример приложения был создан @ GitHub.https://github.com/chrismoutray/AuthSample Это в основном показывает, что даже если для флага isPersistent задано значение true, кросс-браузерная авторизация не работает.

Ваш Ответ

1   ответ
9

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

изменить: я скачал ваш образец и заменил ваш код cookie на

 FormsAuthentication.SetAuthCookie(model.UserName, true);

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

Если для IsPersistent установлено значение true, срок действия сгенерированного куки-файла истекает как сейчас + время ожидания формы. Это не ваш случай?
Мне кажется, что я что-то упустил, cookie не будет сохраняться, пока я не установлю файлы cookie специальноExpires поле. Установка IsPersistent не имеет никакого эффекта. Chris Moutray
Установка точки останова на строку после создания куки;cookie.Expires имеет значение01/01/0001 00:00:00и не соответствует значению срока действия билетов. Chris Moutray
Я много раз видел один и тот же вопрос, спрашивающий, почему установка isPersistent для аутентификационного билета не работает; обычно сопровождается стандартным ответом установки даты истечения срока действия куки, как показывает мой пример кода. Chris Moutray
Ну нет - если я уберу строкуcookie.Expires = DateTime.Now.AddYears(1); функция входа в систему, запоминаемая мной, не работает, даже если для isPersistent установлено значение true. Chris Moutray

Похожие вопросы