Приложение Facebook iFrame IE7 не разрешает файлы cookie

Я знаю, что эта тема широко освещена, но я полностью застрял и нуждаюсь в каком-то направлении и новых мнениях. У меня есть приложение iFrame для Facebook, которое отлично работает в IE6,8, Safari, Chrome, FF и т. Д. Только IE7 меня огорчает.

Я создал файл политики P3P и связанный с ним XML-файл. Политика полностью проверяется с помощью средства проверки политики P3P.

Как только iFrame загружается из Facebook, появляется значок красных глаз, и когда я щелкаю по нему, он сообщает, что файлы cookie из домена iFrame заблокированы. Я подтвердил, что в IE7 установлен «средний» параметр конфиденциальности по умолчанию. Интересно, что я обнаружил, что после удаления Google Analytics страница будет загружаться изначально без блокировки файлов cookie, но как только страница перезагружается или пользователь входит в систему, файлы cookie снова блокируются, даже если заголовок P3P отправляется немедленно из каждого страница. Все активы отправляются через S3, поэтому проблем быть не должно.

К вашему сведению, вот мой файл P3P; Я пробовал абсолютные пути, относительные пути, порядок переключения CP и policyref и безуспешно разделил их на отдельные вызовы заголовков.

header('P3P: CP="NON DSP TAIa PSAa PSDa OUR IND UNI", policyref="/w3c/p3p.xml"');

Я подтвердил, что заголовок P3P отправляется и принимается браузером. Я добавил тег META p3p на страницу HTML. Я удалил все перенаправления. Тем не менее проблема не устранена. Я потратил так много времени на изучение этого, и теперь у меня нет идей. Мы будем очень благодарны за любые мысли или идеи о том, как подойти к этому с новой точки зрения. Я использую PHP 5.3.5 вместо NGINX. Фреймворк не используется ...


person Tyler    schedule 01.02.2011    source источник


Ответы (2)


У меня такая же проблема. Приложение Facebook iframe отлично работало во всех браузерах, кроме IE7. Когда вы впервые зашли в приложение, оно загрузилось нормально. Но затем, когда вы щелкаете ссылку, она нормально загружает страницу, но затем через секунду или около того обновляется и перенаправляет браузер. В итоге вы получили пустую страницу. У меня также был значок красных глаз, блокирующий печенье.

Виновником оказался код javascript, который загружает javascript lib facebook:

FB.init({
            appId  : '<?=FACEBOOK_APP_ID?>',
            status : true, // check login status
            cookie : true, // enable cookies to allow the server to access the session
            xfbml  : true  // parse XFBML
        });

Чтобы решить эту проблему, я изменил status: true на status: false. Теперь при переходе по ссылкам страница загружается и не обновляется.

Итак, что на самом деле здесь происходит, я не уверен, но у меня есть предположение ... Перенаправление было вызвано тем, что JavaScript FB проверял статус входа и по какой-то причине думал, что пользователь вышел из системы, и поэтому перенаправлялся на страницу входа. Скрипт входа на стороне сервера, я думаю, тогда увидит, что вы действительно вошли в систему, и перенаправит вас обратно в приложение. И так далее и так далее.

Таким образом, проблема IE7, не устанавливающего файлы cookie, установленные внутри iframe, все еще существует, сглаз остается. Но пока ссылки внутри вашего iframe ссылаются на родительское окно target = "_ top", указывающее на страницу холста facebook, похоже, вам все равно не нужен cookie. PHP SDK ищет сеанс в нескольких местах, начиная с $ _REQUEST. Я предполагаю, что когда facebook загружает iframe, он включает параметр сеанса в строку запроса. Таким образом, даже если файлы cookie не работают в IE7 через iframe, ваши серверные скрипты все равно будут получать их из параметра запроса.

Надеюсь, что в этом есть какой-то смысл, я не совсем понимаю, но оно исправило мое приложение.

person Peter Bro    schedule 03.02.2011
comment
Привет, Питер: очень интересно, спасибо за объяснение. К сожалению, наши запросы выполняются через AJAX, поэтому резкое обновление невозможно. В конечном итоге мы сохранили необходимые данные в объекте JSON и проверили эти данные при отправке, если у нас был действительный сеанс, и в противном случае (т.е. 7) отправили данные. Поскольку приложение было доступно в течение короткого времени, нас не слишком беспокоили фальсифицированные данные. Мы также используем JS SDK для уничтожения недействительных сеансов (единственный способ, поскольку файлы cookie состояния FB управляются через их домен), поэтому мы также не можем пойти по этому пути по этой причине. - person Tyler; 08.02.2011

Я не знаю, но, возможно, это поможет, в моем приложении это сработало как шарм.

header('P3P: CP="CAO PSA OUR"');
ob_start();
session_start();
person user679980    schedule 27.04.2011