Я использую аутентификацию форм довольно успешно, но столкнулся с странной проблемой. Я просмотрел сеть и не нашел ответа до сих пор.Обновление аутентификационного билета формы - странное время
Я использую Javascript, чтобы определить, когда текущий сеанс находится в 60 секундах от тайм-аута, и если это так - выведите диалоговое окно с кнопкой, которая при нажатии будет расширять текущий билет FormsAuthentication.
Это код, который я использую для обновления билета. Я просто добавляю 5 минут к текущей дате истечения срока действия билета. Но когда я выдаю новую дату истечения срока действия, это всегда менее 5 минут; обычно 4 минуты и несколько секунд.
Код:
string userID = HttpContext.Current.User.Identity.Name;
HttpCookie cookie = FormsAuthentication.GetAuthCookie(userID, true);
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);
DateTime NEW_EXPIRY = DateTime.Now.AddMinutes(FormsAuthentication.Timeout.Minutes);
FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(
ticket.Version,
userID,
DateTime.Now,
NEW_EXPIRY,
ticket.IsPersistent,
ticket.UserData,
ticket.CookiePath);
cookie.Value = FormsAuthentication.Encrypt(newTicket);
if (ticket.IsPersistent) cookie.Expires = newTicket.Expiration;
cookie.Secure = FormsAuthentication.RequireSSL;
HttpContext.Current.Response.Cookies.Add(cookie);
Итак, вот пример вывода из временных разниц:
Метка времени в настоящее время = 16/01/2016 14:03:28 билет истекает = 16/01/2016 14:07:49 (TOTAL SECONDS = 261.0857244)
Почему это не сбрасывает срок годности точно в 14:08:28 ?? Я ударяю головой о стену здесь ...
Сайт работает локально или на сервере? – stuartd
Я выхожу на конечность здесь - ваш код, возможно, занимает переменное количество секунд, чтобы получить свойство FormsAuthentication.Timeout? Возможно, из-за настройки IIS? Я предполагаю, что во время выполнения 'DateTime.Now' читается, тогда требуется некоторое время для инициализации и получения тайм-аута, после чего он добавляется в текущее время ... – Balah
@stuartd - он работает локально, но делает то же самое на сервере – andym0908