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

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

  1. createPersistentCookie устанавливается в true на LoggedIn событии.
  2. MachineKey указан.
  3. Установлен скользящий срок действия форм 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, содержащего билет, по какой-то причине сброшена дата. Во-первых, я не могу переопределить настройки в web.config, поэтому в конце события LoggedIn свойство Expires составляет 4000 минут после даты выпуска, а не месяц, который я устанавливаю программно. Затем после загрузки страницы файл cookie, который я получаю с помощью FormsAuthentication.FormsCookieName, имеет свойство Expires от 01/01/0001. Думаю, может быть, в этом проблема? Любые мысли будут оценены.

ИЗМЕНИТЬ №2: я изменяю и заголовок, и теги, чтобы включить сеанс, поскольку он оказался актуальным для проблемы / решения


person Shagglez    schedule 23.06.2010    source источник


Ответы (2)


Так что в конце концов я нашел решение. Как оказалось, проблема не в файле 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);

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

person Shagglez    schedule 21.07.2010
comment
Это тоже решило мою проблему. Если вы не укажете домен, клиентский браузер по умолчанию будет использовать текущий домен. - person jhappoldt; 06.01.2011

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

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

person marapet    schedule 23.06.2010
comment
Это не зависит от браузера, это происходит во всех браузерах. Вероятно, это больше связано с обстановкой, которую я, должно быть, где-то упустил. Тайм-аут также не имеет значения, потому что файлов cookie не будет, если я закрою и открою браузер в течение примерно 10 секунд. - person Shagglez; 24.06.2010
comment
Когда возникает событие LoggedIn, файл cookie уже создан. Также убедитесь, что вы указали значение тайм-аута в файле web.config. Обычно я сам создаю файл cookie для аутентификации. В статье используется событие LoggingIn для предотвращения автоматического создания файла cookie: blogs.msdn.com/b/swathis/archive/2009/04/03/ < / а> - person marapet; 24.06.2010
comment
Спасибо за комментарий, я просмотрел статью и провел небольшое расследование. В моем случае билет проверки подлинности имеет свойство IsPersistent, установленное на true на всех страницах (и я вручную изменил срок действия, чтобы он был далеко в будущем), поэтому это не значит, что он не настраивается должным образом. Однако как только я закрываю браузер, он исчезает. - person Shagglez; 19.07.2010