IE, P3P, IFrame и заблокированные куки-файлы (работает до тех пор, пока на странице хоста не будет запрошена личная информация)

У моей компании есть небольшой виджет, который подключается к корзинам. Мы столкнулись с проблемой, когда настройка файлов cookie в IE7 не работает. Это происходит потому, что мы являемся третьей стороной, потому что мы встроены в сайт через iframe.

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

Cookie заблокирован / не сохранен в IFRAME в Internet Explorer

Я подтвердил, что моя политика P3P находится в моем заголовке HTTP. И на самом деле это работает для первой страницы / шага сайта корзины покупок, но как только на странице появляется личная информация (например, имя, адрес, телефон и т. Д.), IE блокирует мой сайт и мой файл cookie.

Я пробовал несколько разных политик P3P, и все они не работают в одном месте. Я также использовал инструмент IBM P3P для генерации собственной специальной политики P3P, но она все еще не работает.

Я в полной растерянности.

7 ответов

Это, вероятно, больше никому не поможет, но я несколько недель стучал головой об стену из-за этого. Оказывается, что IE 7 не позволит устанавливать сторонние файлы cookie, даже с действующей компактной политикой P3P, если метатег HTML для Content-Type имеет другое объявление набора символов на странице с iframe со страницы внутри фрейм

У меня была похожая проблема некоторое время назад. Убедитесь, что вы добавили заголовок p3p ко всем страницам внутри iframe,

Существует очень коварная ошибка Internet Explorer 7, о которой следует знать: при запросе 304 ("Не изменен") внутри фрейма заголовок P3P не будет отправляться веб-сервером в соответствии с RFC (если только вы не используете IIS, который не заботится о таких вещах). IE7 фактически удалит любой набор файлов cookie во время этого конкретного запроса.

Это будет иметь эффект, который вы описали выше, так что, возможно, это то, что происходит. IE6 и IE8 (и любой другой браузер) работают как положено.

Веб-отладчик Fiddler (www.fiddler2.com) имеет вкладку "Конфиденциальность" в ответе, которая декодирует токены P3P в их значения. Внизу инспектора есть ссылка, которая указывает на статью MSDN, в которой показано, какие политики считаются "приемлемыми" по умолчанию.

Обратите внимание, конечно, что политики P3P являются юридической декларацией, поэтому вы должны быть уверены, что использование вами файлов cookie соответствует тому, что вы заявляете в P3P.

Мы столкнулись с проблемой, описанной выше, с 304 запросами (кэшированное содержимое). Наш балансировщик нагрузки устанавливал cookie-файл сеанса, но веб-сервер Apache не включал заголовок P3P для запросов, которые привели к коду результата 304. Таким образом, информация о сессии будет испорчена.

Так что об этом нужно знать с помощью балансировщиков нагрузки. Когда они устанавливают cookie для отслеживания постоянства, убедитесь, что он также генерирует заголовок P3P, чтобы они всегда отправлялись в тандеме.

У меня была та же проблема, и я решил использовать подход Google/Facebook и подделать заголовок P3P. У меня действительно были некоторые проблемы, хотя.

  1. Сначала вы должны убедиться, что передаете этот заголовок с помощью ALL.
  2. Если вы используете веб-сервер разработки Visual Studio, заголовок P3P по какой-то причине будет игнорироваться. Итак, разместите ваше приложение в IIS.

Проблема 1:

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

 protected void Application_BeginRequest(Object sender, EventArgs e) {
            //
            HttpContext.Current.Response.AddHeader("P3P", "CP=\"This is not a P3P policy! See http://mydomain.com/privacy-policy for more info.\"");
        }

Проблема 2:

Довольно понятно. Разместите свой проект в IIS.

Я принял решение обойти P3P, когда узнал, что W3C не работал и не обновлял стандарт с 2006 года. Для меня это означает, что он мертв, и у нас просто есть основной браузер, поддерживающий мертвый стандарт. Проект был моим, я был / я клиент. Так что, если вы планируете совершать те же действия и не пишете что-то для себя, посоветуйтесь с силами, которые будут.

Ура!

Печенье должно иметь expires=Fri, 19-Dec-14 18:00:40 GMT и не max-age,

Это контролируется в Apache mod_usertrack с помощью конфигурации CookieStyle=Netscape

Другие вопросы по тегам