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

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

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

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

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

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

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

Ответы [ 7 ]

14 голосов
/ 21 ноября 2009

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

5 голосов
/ 16 июня 2009

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

4 голосов
/ 29 ноября 2010

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

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

3 голосов
/ 04 ноября 2011

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

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

3 голосов
/ 26 июня 2009

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

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

2 голосов
/ 04 августа 2012

У меня была та же проблема, и я решил использовать подход 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 года. Это для меня означает, что он мертв, и у нас просто есть основной браузер, поддерживающий мертвый стандарт. Проект был моим, я был / я клиент. Поэтому, если вы планируете совершать те же действия и не пишете что-то для себя, посоветуйтесь с силами, которые будут.

Ура!

1 голос
/ 19 декабря 2012

Файл cookie должен иметь expires=Fri, 19-Dec-14 18:00:40 GMT, а не max-age.

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

...