2012-04-11 15 views
5

Ich habe an einem Problem für die letzten eineinhalb Tage gearbeitet und habe immer noch eine Lösung zu finden.Facebook iFrame Leinwand App PHP Sitzungen Ausgabe

Wenn ich mein Spiel auf Facebook (das ist in Facebooks iFrame) besuchen, funktionieren PHP-Sitzungen nicht. Dies ist für IE und Safari. Chrome funktioniert gut.

Ich habe bereits alle Beiträge auf Stack über dieses Problem gelesen, die auf Cookie-Sicherheit von Drittanbietern zu sein scheinen und die Interaktion mit dem iFrame zuerst benötigen. Es gab einen Workaround, indem JavaScript zuerst einige Formulardaten an den iFrame posten ließ, aber dies wurde in letzter Zeit in den neuesten Versionen des Browsers "behoben", da dies nicht mehr funktioniert.

Ich habe sogar versucht, eine Startseite zu implementieren, die sie zuerst auf einen Link (im iFrame) klicken müsste, um eine andere Seite zu laden, die dann die Sitzung erstellen würde. Aber selbst das funktioniert nicht.

Ich habe auch Probleme beim Laden neuer Seiten im iFrame mit Javascript, das immer Endlosschleife zu aktualisieren scheint.

Und nein, P3P-Header lösen es nicht.

Hat jemand eine Lösung für dieses Problem? Ich kann nicht der Einzige sein, wenn man bedenkt, wie viele Facebook-Apps existieren!

+0

haben Sie die richtige p3p-Richtlinie? Ich habe viele FB-Apps und Session-Probleme wurden immer mit den richtigen p3p-Headern gelöst – scibuff

+0

Sogar für Safari? Können Sie mir ein Beispiel für Ihren Header geben? Ich denke, ich steckte ein: header ('p3p: CP = "NOI ADM DEV PSAi COM NAV OUR STP IND DEM"); umsonst. –

Antwort

5

Ich stieß auf dieses Problem mit einem Client, der "Cookies von Drittanbietern akzeptieren" deaktiviert hatte. Meine Lösung war PHP zu zwingen, indem man diese Zeile am Beginn jeder Seite der Session-ID in die URI einbetten:

ini_set('session.use_trans_sid', true); 

Da die URLs sind in iframe in Facebook die SID nicht im oberen Fenster zu sehen ist.

+0

Ich habe auch mit diesem Problem gekämpft, und diese Antwort führte mich zu der Entdeckung, dass ich auch "Cookies von Drittanbietern akzeptieren" deaktiviert hatte. Dies scheint ein potenzielles großes Problem für alle zu sein, daher bin ich überrascht, dass dies nirgends in Facebook oder anderen Tutorials erwähnt wird. – Zimzat

3

Für IE benötigen Sie die P3P-Header-Set. Etwas wie:

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

Safari blockiert 3rd-Party-Cookies standardmäßig. Momentan besteht die einzige Problemumgehung für mich darin, ein neues Fenster zu öffnen, um die Cookies zu setzen. Ich habe so etwas wie dies:

<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> 

Und safari.php haben diese:

<?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> 

PROBLEM: Das wird nicht funktionieren, wenn der Benutzer "Pop-ups blockieren" aktiviert ist in Safari. Wenn jemand eine bessere Lösung dafür hat, informieren Sie mich;)