2012-04-11 113 views
5

我一直在努力解決最後一天半的問題,並且還沒有找到解決方案。Facebook iFrame畫布應用程序PHP會話問題

當我在Facebook上瀏覽我的遊戲(這是在Facebook的iFrame中)php會話不起作用。這是爲IE和Safari。 Chrome工作正常。

我已經閱讀了關於這個問題的所有帖子,這似乎是第三方cookie的安全性,需要首先與iFrame交互。有一種解決方法是讓javascript首先將一些表單數據發佈到iFrame上,但是這種情況在最近版本的瀏覽器中似乎已經「修復」了,因爲這不再適用。

我甚至嘗試實施一個開始頁面,要求他們先點擊一個鏈接(在iFrame中)加載另一個頁面,然後創建會話。但即使這樣也行不通。

即使在使用javascript的iFrame中加載新頁面時,我也遇到了麻煩,這似乎總是會導致無限循環刷新。

沒有,P3P標題不能解決它。

有沒有人有解決這個問題的辦法?考慮到有多少facebook應用程序存在,我不能成爲唯一一個擁有它的人!

+0

您是否擁有正確的p3p策略?我有很多FB應用程序和會話問題總是通過正確的p3p標題解決 – scibuff 2012-04-11 11:41:11

+0

即使是Safari瀏覽器?你能給我一個頭的例子嗎?我想我插入:header('p3p:CP =「NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM」');無濟於事。 – 2012-04-11 12:05:40

回答

5

我遇到了這個問題,使用禁用「接受第三方cookie」的客戶端。我的解決辦法是迫使PHP放上這行,在每一頁的開始嵌入會話ID到URI:

ini_set('session.use_trans_sid', true); 

由於URL是在iframe中,Facebook的SID是不是在上面的窗口看到。

+0

我一直在努力解決這個問題,這個答案讓我發現我也禁用了「接受第三方Cookie」。這似乎是每個人都可能遇到的主要問題,所以我很驚訝,這在Facebook或其他教程的任何地方都沒有提及。 – Zimzat 2012-08-01 17:47:12

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> 

問題:如果用戶有「阻止彈出窗口」這不會工作,啓用蘋果瀏覽器。如果有人有更好的解決方案,請告訴我;)

相關問題