2012-04-11 3 views
5

Я работаю над проблемой в течение последних полутора дней и еще хочу найти решение.Facebook iFrame canvas app PHP session issue

Когда вы посещаете мою игру на facebook (которая находится в iFrame facebook), сеансы php не работают. Это для IE и Safari. Chrome работает отлично.

Я уже прочитал все сообщения о стеке об этой проблеме, которая, похоже, связана с защитой сторонних файлов cookie и требует взаимодействия с iFrame. Возникло обходное решение, сделав сначала javascript для некоторых данных формы для iFrame, но это, похоже, совсем недавно исправлено в последних версиях браузеров, поскольку это больше не работает.

Я даже попытался внедрить стартовую страницу, которая потребовала бы, чтобы они сначала щелкнули ссылку (в iFrame), чтобы загрузить другую страницу, которая затем создала бы сеанс. Но даже ЭТО не работает.

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

И нет, заголовки P3P НЕ РЕШИТЬ.

У кого-нибудь есть решение этой проблемы? Я не могу быть единственным с ним, учитывая, сколько существует приложений facebook!

+0

у вас есть правильная политика p3p? У меня много приложений FB, и вопросы сессии всегда решались с правильными заголовками p3p. – scibuff

+0

Даже для сафари? Можете ли вы привести мне пример своего заголовка. Я думаю, что подключил: header ('p3p: CP = "NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM"); но безрезультатно. –

ответ

5

Я столкнулся с этой проблемой, используя клиента, который «принял сторонние файлы cookie» отключен. Мое решение было заставить PHP вставлять идентификатор сеанса в URI, поместив эту строку в начале каждой страницы:

ini_set('session.use_trans_sid', true); 

Как URL, в IFRAME в Facebook идентификатор безопасности не виден в верхней части окна.

+0

Я тоже борюсь с этой проблемой, и этот ответ привел меня к тому, что я обнаружил, что у меня также были «отключены сторонние куки-файлы». Это кажется потенциальной серьезной проблемой для всех, поэтому я удивлен, что это не упоминается нигде в Facebook или других учебниках. – Zimzat

3

Для IE вам понадобятся набор заголовков P3P. Что-то вроде:

<?php header('P3P: CP="CAO PSA OUR"'); ?> 

Safari блокирует сторонние файлы cookie по умолчанию. В настоящее время единственная работа, которая работает для меня, - это «всплывающее» окно для установки файлов cookie. У меня есть что-то вроде этого:

<script type="text/javascript"> 
    function safariFix(){ 
     if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1){ 
      window.open('https://yourdomainname.com/safari.php', 'Safari Fix','width=100,height=100'); 
     } 
    } 
</script> 

И safari.php будет иметь это:

<?php 
setcookie("safari_test", "1"); 
?> 
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <title>Safari Fix</title> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 
    </head> 
    <script type="text/javascript"> 
    $(document).ready(function(){ 
     window.close(); 
    }); 
    </script> 
    <body> 
     Since Safari does not accept third-party cookies by default, we are forced to open this window. 
     This window will automatically close once we have set the cookies. 
    </body> 
</html> 

ПРОБЛЕМА: Это не будет работать, если пользователи имеют «блокировать всплывающие окна» включен в Сафари. Если у кого-то есть лучшее решение для этого, сообщите мне;)