Файл cookie аутентификации ASP.NET исчезает, только в IE, только из определенных мест - PullRequest
5 голосов
/ 13 декабря 2011

Internet Explorer не хранит мой файл cookie для аутентификации после перенаправления одной страницы.

Вот ситуация:

У меня есть веб-приложение ASP.NET 2.0, работающее на общем хостинге iis7.Приложение использует проверку подлинности с помощью форм для обработки имени пользователя и имени пользователя, а также для записи файла cookie (.ASPXFORMSAUTH) на клиентском компьютере для этой цели.

в IE (проверено с версией 8, 9), из некоторых мест , куки-файл аутентификации не сохраняется после первой страницы.Наблюдаемое поведение:

  1. Имя пользователя и пароль представлены в форме входа в систему
  2. Пользователь успешно перенаправлен на первую страницу после входа в систему (и fiddler показывает, что файл cookie .ASPXFORMSAUTHсуществует)
  3. После нажатия другой ссылки или нажатия клавиши F5 для обновления пользователь зачисляется на учетную запись, и файл cookie для проверки подлинности (согласно fiddler) больше не существует.при обновлении / щелчке отсутствует файл cookie аутентификации в заголовках запроса.

Этого не происходит в Chrome / FF, и даже в IE, похоже, это зависит от местоположения, из которого я подключен.

также, локально (используя внутренний сервер разработчика в VS2008), все работает нормально и хорошо отражается и в фиддлере.

Я бьюсь головой об этом уже несколько дней.Я подумал, что это может быть какая-то странная проблема с брандмауэром, но не смог определить что-либо убедительное.

Идеи будут оценены.

Ответы [ 4 ]

10 голосов
/ 22 февраля 2012

IE страдает от странной ошибки - по некоторым причинам, если в имени домена присутствуют не алфавитно-цифровые символы, IE не будет сохранять куки ... и, следовательно, у вас не будет постоянного сеанса между различными вызовами.

Проверьте, не содержит ли ваш домен не алфавитно-цифровые символы, такие как test_domain или test-domain или им подобные. К сожалению, я не знаю каких-либо исправлений для этого псевдонима инкриминируемого домена или прямого доступа к нему через IP. Причина, по которой у вас нет проблем локально, заключается в том, что вы указываете на http://localhost,, что вполне нормально. Как только вы развернетесь в домене, не совместимом с IE, вы увидите проблему.

Произошло со мной, и потребовались часы, чтобы выяснить, почему. Надеюсь это поможет. Еще одна причина убить IE огнем.

1 голос
/ 15 июня 2012

Мое решение представляло собой комбинацию других решений:

  1. IE не сохраняет маркер / cookie аутентификации asp.net
  2. http://connect.microsoft.com/VisualStudio/feedback/details/662275/asp-net-user-agent-sniffing-and-ie10-internet-explorer-10
  3. обновление до .NET 4.0 с добавлением тега ticketCompatibilityMode = "Framework40" в web.xml: http://msdn.microsoft.com/en-us/library/1d3t3c61.aspx

Обратите внимание, что реальное окончательное решение было третьим.

И последнее, но не менее важное: как только я установил этот флаг выше, мне пришлось изменить метод выхода из системы в коде, потому что старый уже не выходил из системы:

protected void LoginStatusLink_LoggedOut(object sender, EventArgs e) {
    // remove the authenticatation cookies from the browser
    FormsAuthentication.SignOut();

    // force a new 'expired' auth cookie
    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName);
    cookie.Expires = DateTime.Now.AddMonths(-1);
    Response.Cookies.Add(cookie);

    // delete roles cookie
    Roles.DeleteCookie();

    // clear and abandon session
    Session.Clear();
    Session.Abandon();

    // this line just to leave (forget) the current page
    this.Response.Redirect("~/");
}
0 голосов
/ 28 февраля 2012

Проверьте дату сервера.У меня была ситуация, когда сервер находился за браузером в течение 1 дня, и поэтому файл cookie для проверки подлинности сразу же истек.Это коснулось IE, но не FF.

0 голосов
/ 14 декабря 2011

1.попробуйте создать постоянный файл cookie

2. проверьте настройки cookie для IE

...