Аутентификация / удаление файлов cookie сеанса после закрытия браузера - PullRequest
10 голосов
/ 23 июня 2010

Каковы точные шаги, необходимые для сохранения файла 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: Я изменяю заголовок и теги, чтобы включить сессию, поскольку это оказалось актуальным для проблемы / решения

Ответы [ 2 ]

10 голосов
/ 21 июля 2010

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

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

0 голосов
/ 23 июня 2010

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

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

...