Удаление аутентификации/сеанса cookie после закрытия браузера

Каковы точные шаги, необходимые для сохранения файла cookie после закрытия браузера? На данный момент у меня есть:

  • createPersistentCookie установите true на LoggedIn событие.
  • Указан MachineKey.
  • Срок действия скользящего срока формы равен true.

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

РЕДАКТИРОВАТЬ: Я просмотрел статью, указанную в marapet (см. Комментарии ниже), и меня заинтересовало то, действительно ли у билета есть флаг IsPersistent, который он делает. Дешифрованный билет выглядит так: System.Web.Security.FormsAuthentication.Decrypt(Request.Cookies[System.Web.Security.FormsAuthentication.FormsCookieName].Value) {System.Web.Security.FormsAuthenticationTicket} CookiePath: "/" Expiration: {19/08/2010 17:27:14} Expired: false IsPersistent: true IssueDate: {19/07/2010 17:27:14} Name: "alex" UserData: "" Version: 2 Все данные верны и соответствуют тем, которые я установил в событии LoggedIn. Больше, чем значение cookie, которое я могу получить из файла cookie напрямую, идентично этому. Однако, как только я закрываю браузер, cookie теряется.

Однако я заметил, что cookie, несущий билет, имеет дату reset по какой-то причине. Во-первых, я не могу переопределить настройки в web.config, поэтому в конце события LoggedIn свойство Expires истекает через 4000 минут после даты выпуска, а не месяц, который я устанавливаю программно. Затем после загрузки страницы куки файлы, которые я получаю с помощью FormsAuthentication.FormsCookieName, имеют свойство Expires 01/01/0001. Я думаю, что, возможно, это проблема? Любые мысли будут оценены.

Edit # 2: Я изменяю оба заголовка и теги, чтобы включить сеанс, так как он оказался релевантным для проблемы/решения

Ответ 1

Итак, я нашел решение, в конце концов. Как оказалось, это не проблема с cookie аутентификации как таковая (она была сохранена правильно или, вернее, была бы, если обработчик не удалил ее, неверно решил, что пользователь не был зарегистрирован на основе отсутствующий сеанс). Проблема заключалась в том, что файл cookie сеанса был потерян или не был идентифицирован должным образом. Таким образом, исправление заключалось в том, чтобы вручную добавить cookie сеанса во время входа в систему следующим образом:

HttpCookie authCookie = new HttpCookie("ASP.NET_SessionId", Session.SessionID);
authCookie.Domain = ".mydomain.com";
authCookie.Expires = DateTime.Now.AddMonths(1);
Response.Cookies.Add(authCookie);

Теперь, когда браузеры снова открываются, сеанс правильно идентифицируется и пользовательский сеанс восстанавливается.

Ответ 2

Сохраняемый файл cookie с постоянными формами не следует отбрасывать, когда браузер закрывается. Он остается действительным для значения таймаута, определенного в файле web.config.

Однако некоторые браузеры могут быть настроены на удаление всех файлов cookie в конце сеанса - вы можете проверить настройки своего браузера (FireFox: Tools - options - privacy).