Что требуются точные шаги, чтобы cookie сохранился после того, как браузер закрывается? В данный момент я имею:
createPersistentCookie
набор к true
на LoggedIn
событие. 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.01. Я думаю, возможно, что это - то, где проблема заключается? Любые мысли ценились бы.
EDIT#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);
Теперь, когда браузеры снова открываются, сеанс идентифицируется правильно и сеанс пользователя восстанавливается.
Постоянный файл cookie аутентификации форм не должен удаляться при закрытии браузера. Он остается действительным в течение тайм-аута, определенного в web.config.
Однако некоторые браузеры могут быть настроены на удаление всех файлов cookie в конце сессии - вы можете проверить настройки вашего браузера (FireFox: Инструменты - параметры - конфиденциальность).