Я заставил его работать, но решение немного сложное, так что терпите меня.
Что происходит
Как таковой, Internet Explorer обеспечивает более низкий уровень доверия страницам IFRAME (IE называет это «сторонним» контентом). Если страница внутри IFRAME не имеет Политики конфиденциальности, ее файлы cookie блокируются (что обозначается значком глаза в строке состояния, при нажатии на который отображается список заблокированных URL-адресов).
(источник: piskvor.org )
В этом случае, когда куки блокируются, идентификатор сеанса не отправляется, и целевой скрипт выдает ошибку «сеанс не найден».
(Я пытался установить идентификатор сеанса в форме и загрузить его из переменных POST. Это сработало бы , но по политическим причинам я не смог этого сделать.)
Можно сделать страницу внутри IFRAME более надежной: если внутренняя страница отправляет заголовок P3P с политикой конфиденциальности, приемлемой для IE, файлы cookie будут приниматься .
Как это решить
Создание политики p3p
Хорошей отправной точкой является учебник W3C . Я прошел через него, скачал Редактор политики конфиденциальности IBM и там я создал представление политики конфиденциальности и дал ей имя для ссылки на него (здесь это было policy1
).
ПРИМЕЧАНИЕ : на данный момент вам действительно нужно выяснить, есть ли у вашего сайта политика конфиденциальности, а если нет, то создать ее - собирает ли она пользовательские данные, какие данные, что делает с ним, у кого есть доступ к нему и т. д. Вам нужно найти эту информацию и подумать об этом. Простое объединение нескольких тегов не обрезает его. Этот шаг не может быть выполнен исключительно в программном обеспечении и может быть очень политическим (например, «мы должны продавать нашу статистику кликов?»).
(например, «сайт управляется ACME Ltd., он использует анонимные идентификаторы сеанса для своей работы, собирает пользовательские данные, только если это явно разрешено, и только для следующих целей, данные хранятся только столько времени, сколько необходимо, только наша компания имеет к нему доступ и т. д. и т. д. ").
(При редактировании с помощью этого инструмента можно просматривать ошибки / упущения в политике. Также очень полезна вкладка «Политика HTML»: внизу имеется «Оценка политики» - быстрая проверка, если политика будет заблокирован настройками IE по умолчанию)
Редактор экспортирует в файл .p3p, который представляет собой XML-представление вышеуказанной политики. Кроме того, он может экспортировать «компактную версию» этой политики.
Ссылка на полис
Затем понадобился файл ссылки на политику (http://example.com/w3c/p3p.xml
) (индекс политик конфиденциальности, используемых сайтом):
<META>
<POLICY-REFERENCES>
<POLICY-REF about="/w3c/example-com.p3p#policy1">
<INCLUDE>/</INCLUDE>
<COOKIE-INCLUDE/>
</POLICY-REF>
</POLICY-REFERENCES>
</META>
<INCLUDE>
показывает все URI, которые будут использовать эту политику (в моем случае, весь сайт). Файл политики, который я экспортировал из редактора, был загружен в http://example.com/w3c/example-com.p3p
Отправьте компактный заголовок с ответами
Я настроил веб-сервер на example.com на отправку компактного заголовка с ответами, например:
HTTP/1.1 200 OK
P3P: policyref="/w3c/p3p.xml", CP="IDC DSP COR IVAi IVDi OUR TST"
// ... other headers and content
policyref
- это относительный URI к файлу ссылки на политику (который в свою очередь ссылается на политику конфиденциальности), CP
- это компактное представление политики. Обратите внимание, что комбинация заголовков P3P в этом примере может не применяться на вашем конкретном веб-сайте; Ваши заголовки P3P ДОЛЖНЫ правдиво представлять вашу собственную политику конфиденциальности!
Прибыль!
В этой конфигурации Evil Eye не появляется, куки сохраняются даже в IFRAME, и приложение работает.
Редактировать: Чего НЕ делать, если только вы не любите защищаться от судебных процессов
Несколько человек предложили «просто вставить несколько тегов в заголовок P3P, пока дурной глаз не сдастся».
Теги - это не только куча битов, они имеют значения реального мира , и их использование дает вам обязанности реального мира !
Например, притворство, что вы никогда не собираете пользовательские данные, может сделать браузер счастливым, но если вы действительно собираете пользовательские данные, P3P вступает в противоречие с реальностью. Проще говоря, вы целенаправленно лжете своим пользователям , и в некоторых странах это может быть преступным поведением. Например, «отправляйся в тюрьму, не собирай 200 долларов».
Несколько примеров ( полный набор тегов см. В p3pwriter ):
- NOI : «Веб-сайт не собирает идентифицированные данные». (как только появится какая-либо настройка, логин или какой-либо сбор данных (***** Analytics, кто-нибудь?), вы должны подтвердить это в своем P3P)
- STP : Информация сохраняется для достижения заявленной цели. Это требует, чтобы информация была удалена как можно раньше. Сайты ДОЛЖНЫ иметь политику хранения, которая устанавливает расписание уничтожения. Политика хранения ДОЛЖНА быть включена или связана с понятной для человека политикой конфиденциальности сайта. "(Поэтому, если вы отправляете
STP
, но у вас нет политики хранения, вы можете совершать мошенничество. не так ли?)
Я не юрист, но я не желаю обращаться в суд, чтобы узнать, является ли заголовок P3P действительно юридически обязательным или если вы можете пообещать своим пользователям что-нибудь, не желая соблюдать обещает.