2011-02-01 7 views
0

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

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

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

FYI, вот мой файл 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. Никакой каркас не используется ...

ответ

0

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

Виновником оказался бы Javascript код, который загружает фейсбук Javascript Lib:

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 
     }); 

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

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

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

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

+0

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

0

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

header('P3P: CP="CAO PSA OUR"'); 
ob_start(); 
session_start(); 
Смежные вопросы