IE, P3P, IFrame и заблокированные файлы cookie (работает до тех пор, пока страница веб-сайта страницы не запросит личную информацию)
У моей компании небольшой виджет, который подключается к тележкам. У нас возникла проблема, когда настройка файлов cookie в IE7 не работает. Это происходит потому, что мы являемся третьей стороной, потому что мы встроены в сайт через iframe.
Я видел несколько сообщений, в которых говорится о том, как решить эту проблему, путем размещения в заголовке P3P-компактной политики. Как уже упоминалось:
Cookie заблокирован/не сохранен в IFRAME в Internet Explorer
Я проверил, что моя политика P3P находится в моем HTTP-заголовке. И он фактически работает для первой страницы/этапа сайта корзины покупок, но как только на странице есть личная информация (например, имя, адрес, телефон и т.д.), IE блокирует мой сайт и мой файл cookie.
Я пробовал несколько разных политик P3P, и все они не работают в одном и том же месте. Я также использовал инструмент IBM P3P для создания собственной специальной политики P3P, но он все еще не работает.
У меня полная потеря.
Ответы
Ответ 1
Это, вероятно, никому не поможет, но я несколько недель стучал головой о стену. Оказывается, IE 7 не позволяет устанавливать сторонние файлы cookie даже при наличии допустимой P3P-политики, если метатег HTML для Content-Type имеет другую декларацию набора символов на странице с iframe со страницы в пределах iframe.
Ответ 2
У меня была аналогичная проблема когда-то я сам. Убедитесь, что заголовок p3p добавлен в все страницы внутри iframe
.
Ответ 3
Существует очень коварная ошибка Internet Explorer 7, которая должна быть в курсе: по запросу 304 ( "Не изменено" ) внутри iframe заголовок P3P не будет отправляться веб-сервером в соответствии с RFC (если вы не используете IIS, который не заботится о таких вещах). IE7 фактически удалит любой набор файлов cookie во время этого конкретного запроса.
Это будет иметь эффект, описанный выше, поэтому, возможно, что происходит. IE6 и IE8 (и каждый другой браузер) работают должным образом.
Ответ 4
В веб-отладчике Fiddler (www.fiddler2.com) есть вкладка инспектора "Конфиденциальность" на ответ, который декодирует токены P3P в их значениях. В нижней части инспектора есть ссылка, которая указывает на статью MSDN, которая показывает, какие политики считаются "приемлемыми" по умолчанию.
Обратите внимание, конечно, что политики P3P являются юридической декларацией, поэтому вы должны быть уверены, что ваше использование файлов cookie соответствует тому, что вы заявляете в P3P.
Ответ 5
Мы столкнулись с проблемой, описанной выше, с 304 запросами (кэшированный контент). Наш балансировщик нагрузки устанавливал cookie сеанса, но веб-сервер Apache не включал заголовок P3P для запросов, которые привели к результату 304. Итак, информация о сеансе будет запутана.
Итак, это то, о чем нужно знать с Load Balancers. Когда они устанавливают файл cookie для отслеживания персистентности, убедитесь, что он также генерирует заголовок P3P, чтобы убедиться, что они всегда отправляются в тандеме.
Ответ 6
У меня была такая же проблема, и я решил использовать подход Google/Facebook и подделать заголовок P3P. Однако у меня были проблемы.
- Сначала вы должны убедиться, что вы передаете этот заголовок ALL.
- Если вы используете веб-сервер разработки 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 года. Что для меня означает, что он мертв, и у нас просто есть главный браузер, который применяет мертвый стандарт. Проект был моим, я был клиентом. Поэтому, если вы планируете принимать те же самые действия, и не пишете что-то для себя, проверьте с помощью полномочий.
Ура!
Ответ 7
Файл cookie должен иметь expires=Fri, 19-Dec-14 18:00:40 GMT
, а не max-age
.
Это управляется в Apache mod_usertrack с помощью конфигурации CookieStyle=Netscape