FormsAuthenticationTicket expire

Я искал в Интернете и нашел много странных ответов, и я перепробовал почти все из них. Моя проблема заключается в следующем. Моя страница входа содержит:

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(min), persistCookie, userid.ToString());
string encTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
cookie.Expires = ticket.Expiration;
Response.Cookies.Add(cookie);

FormsAuthentication.RedirectFromLoginPage(userName, persistCookie);

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

После того, как я понимаю, этот код должен привести к возможности переопределения значений по умолчанию в web.config. Что должно быть 30 минут.

<authentication mode="Forms">
  <forms loginUrl="~/Default/default.aspx" defaultUrl="~/User/UserMain.aspx"/>
</authentication>

min в настоящее время установлено на 120, а для persistCookie установлено значение true. Когда я вхожу в систему, я получаю тайм-аут на 30 минут. (Не сеанс, поэтому где-то установлена ​​дата истечения срока действия, потому что, если он не был установлен, файл cookie должен быть основан на сеансе, также я не получаю 120 минут, что является здесь своего рода сделкой)

Мой вопрос для упрощения: как мне получить значение «min» для даты истечения срока действия файла cookie?

Это может оказаться слишком простой вещью, но в настоящее время я полностью застрял, поэтому буду признателен за любую помощь.

РЕДАКТИРОВАТЬ: Я изменил логику входа в систему на эту:

FormsAuthenticationTicket fat = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(min), persistCookie, userid.ToString());
string encTicket = FormsAuthentication.Encrypt(fat);
Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket) { Expires = fat.Expiration });
Response.Redirect(FormsAuthentication.GetRedirectUrl(userName, false));

И теперь это работает. Но я не могу понять, почему это сработает, а не предыдущее. Создание билета такое же, единственное отличие состоит в том, что я добавляю свойство Expires HttpCookie при создании HttpCookie, а не после создания объекта.

Если у кого-нибудь есть хорошее объяснение, я весь слушаю! :)

5
задан erikkallen 27 May 2012 в 10:21
поделиться