ie9 теряет куки после перенаправления - PullRequest
8 голосов
/ 12 сентября 2011

У меня есть iframe, который:

  1. отправляет запрос на сервер
  2. сервер возвращает 302 и устанавливает cookie
  3. браузер не сохраняет куки, но делает сообщение(не знаю, почему не получить, но это не имеет значения)
  4. печенье из # 3 потеряно

Я нашел обходной путь:

Response.AddHeader("Pragma", "no-cache");
Response.AddHeader("Cache-Control", "no-cache");

но это не помогло.м.б. кто-нибудь знает, что можно решить эту проблему?

Ответы [ 5 ]

11 голосов
/ 12 сентября 2011

Возможно, вы захотите выяснить, почему ваш браузер выполняет POST, а не GET, поскольку это подразумевает, что есть важная часть информации, которую вы пропустили. Ни один браузер не будет следовать перенаправлению HTTP / 302 с POST .

В IE9 ответы перенаправления кэшируются , если разрешены заголовки (IE8 и ниже не будут кэшировать перенаправления).

Вы можете установить cookie-файл на редирект 302. Здесь есть две возможности:

  1. Ваш файл cookie удаляется из-за того, что вы не указали заголовок P3P в ответе, указывающий, что ваша политика конфиденциальности совместима с желаниями пользователя.
  2. Ваш ответ на перенаправление извлекается из кэша пользователя, а не с сервера, и кэшированный ответ не установил cookie.

Учитывая, что у вас есть эта проблема в IFRAME, # 1 кажется более вероятным. (См. Быстрый взгляд на P3P )

2 голосов
/ 18 июля 2013

Этот пост может быть немного запоздалым, но я недавно рассмотрел эту конкретную проблему для приложения Grails.Много лет назад та же проблема возникла в веб-приложении Java, которое я создал, когда Internet Explorer блокировал файлы cookie (параметры конфиденциальности).Чтобы веб-приложение Java и JavaScript могли записывать файлы cookie на основной странице или в IFRAME в Internet Explorer, из веб-приложения была отправлена ​​политика конфиденциальности.Microsoft по-прежнему поддерживает формат политики конфиденциальности под названием Платформа для настроек конфиденциальности (P3P) .Этот формат не поддерживается в других современных браузерах, но он помогает решить проблемы с файлами cookie IE.Несмотря на проблемы с поддержкой IE3 в P3P, я успешно протестировал следующие настройки P3P со строгой проверкой.

1) Определите необходимые категории для вашего приложения.Для моего приложения требовались категории интерактивные , и uniqueid для правильной работы.Коды компактной политики перечислены на сайте спецификации P3P

Category       Compact
--------       -------
interactive => INT
navigation  => NAV
uniqueid    => UNI

2) Определите, будет ли работать только компактная политика.Для моего приложения достаточно компактного заголовка политики.Если вам требуется файл политики, просмотрите некоторые примеры файлов здесь: http://p3pbook.com/examples.html.

3) Приведенный ниже код является очень упрощенным примером, но все же должен иллюстрировать шаги, которые нужно выполнить.

HttpServletResponse response = (HttpServletResponse) res;

String policySettings = policyFileExists ? "policyref='" + policyFilePath + "', " : "";

policySettings += "CP='INT NAV UNI'";

response.setHeader("P3P", policySettings);

Вы, безусловно, можете выполнять аналогичные шаги в других технологиях, таких как PHP и ASP.NET.Я надеюсь, что это, по крайней мере, поможет людям найти правильное направление для решения проблемы файлов cookie IE.

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

Чтобы подробнее узнать об ответе EricLaw об ответах на перенаправление кэширования в IE 9, посетите эту страницу:

http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx

Кроме того, следует отметить одну вещь, касающуюся кэшированных ответов на перенаправление: на самом деле нет простого способа их очистить. Очистка кеша и куки оставляет их на месте. Есть 2 варианта:

  • Перейдите в приватный режим IE 9
  • Используйте Fiddler для очистки кэша Wininet (в разделе Инструменты)
0 голосов
/ 20 июня 2014

Возможно, вы захотите проверить настройку Expire против Max-Age в вашем cookie.IE не будут учитывать максимальный возраст (может быть, новые будут, если не указан срок действия?), Но они будут смотреть по местному времени и сравнивать его с датой окончания срока действия.Если местное время находится в будущем, или у сервера есть дата в прошлом, файл cookie будет считаться просроченным и не будет отправлен при следующем запросе.

Я также заметил, что даже если IE9 будетСкажите вам в интерфейсе разработчика, что он делает POSt, он действительно выполняет GET после перенаправления 302.Как примечание, все 302 немного запутано, и сайты должны быть 303 и 307, но в любом случае.

0 голосов
/ 10 октября 2011

Я не знаю, если вы когда-нибудь поняли это, но убедитесь, что вы инструктируете свое приложение не устанавливать клиентские куки.В CF есть параметр приложения 'setClientCookies', при установке которого в false убедитесь, что то, что вы описываете, не происходит.(По совпадению, установка его на «ложь» или «нет» не работает, когда CF обычно распознает это как ложное.)

...