2012-04-11 24 views
5

Son bir buçuk yıldır bir sorun üzerinde çalışıyorum ve hala bir çözüm bulmaya çalıştım.Facebook iFrame canvas app PHP oturumları sorunu

Oyunumu facebook'ta ziyaret ettiğimde (facebook'un iFrame'sinde) php oturumları çalışmıyor. Bu IE ve Safari içindir. Chrome iyi çalışıyor.

Üçüncü taraf çerez güvenliği ve iFrame ile ilk önce etkileşime gereksinim duyan bu sorunla ilgili yığındaki tüm iletileri okudum. Javascript'in iFrame'e ilk olarak bazı form verileri göndererek bir geçici çözümü vardı, ancak tarayıcıların son sürümlerinde bu artık işe yaramadığı için 'düzeltildi'.

Daha sonra oturumu oluşturacak başka bir sayfa yüklemek için önce bir bağlantıyı (iFrame'de) tıklatmasını gerektiren bir başlangıç ​​sayfası uygulamayı denedim bile. Ama bu bile işe yaramıyor.

Ayrıca, her zaman sonsuz döngü yenilemelerine neden gibi görünüyor javascript kullanarak iFrame'de yeni sayfalar yükleme konusunda sorun yaşıyorum.

Ve hayır, P3P başlıkları bunu çözmüyor.

Bu sorunun çözümünde herhangi biri var mı? Kaç tane facebook uygulamasının mevcut olduğunu göz önünde bulundurarak, onunla tek kişi olamam!

+0

Doğru p3p politikasına sahip misiniz? Birçok FB uygulamasına sahibim ve oturum sorunları her zaman doğru p3p başlıkları ile çözüldü – scibuff

+0

Safari için bile mi? Bana başlığından bir örnek verebilir misin? Sanırım takılıyorum: başlık ('p3p: CP = "NOI ADM DEVAMI COM NAV OTR STP IND DEM"'); boşuna. –

cevap

5

Bu soruna, "Üçüncü taraf çerezlerini kabul et" devre dışı bırakılmış bir istemci kullanarak rastladım. Benim çözümüm her sayfanın başında bu satırı koyarak URI içine oturum kimliği gömmek için PHP zorlamak için oldu: URL'lerin olarak

ini_set('session.use_trans_sid', true); 

SID üst pencerede görmedim Facebook içinde iframe içindedir.

+0

Bu sorunla da uğraştım ve bu cevap bana "Üçüncü Şahıs Çerezlerini Kabul Et" özelliğini de devre dışı bıraktığımı keşfetmemi sağladı. Bu herkes için potansiyel bir sorun gibi görünüyor, bu yüzden bu Facebook ya da diğer öğreticiler herhangi bir yerde belirtilen şaşırmadım. – Zimzat

3

IE için P3P Üstbilgileri kümesine ihtiyacınız olacak. Şunlar gibi:

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

Safari, varsayılan olarak üçüncü taraf çerezlerini engeller. Şu anda, benim için çalışan tek çalışma, kurabiyeleri ayarlamak için yeni bir pencere açmaktır.

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

Ve safari.php olacak bu:

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

SORUN: Kullanıcıların "blok pop-up" varsa Bu işe yaramaz etkinleştirilmiş Böyle bir şey var Safari. Bunun için daha iyi bir çözüm varsa, bana bilgi verin;)