2011-02-01 33 views
0

我知道這個話題已被廣泛報道,但我完全陷入困境,需要一些方向和新的意見。我有一個完全適用於IE6,8,Safari,Chrome,FF等的Facebook iFrame應用程序。只有IE7讓我感到悲傷。Facebook的iFrame應用程序 - IE7不允許cookies

我已經創建了一個P3P策略文件及其關聯的XML文件。該政策與P3P策略驗證人完全驗證。

只要iFrame從Facebook內部加載,就會出現紅眼圖標,當我點擊它時,它會報告來自iFrame域的cookie被阻止。我已確認在IE7上設置了默認的「中等」隱私設置。有趣的是,我發現通過刪除Google Analytics,頁面將在不阻止Cookie的情況下初始加載,但只要頁面重新加載或用戶登錄,cookie即會再次被阻止,即使P3P標題是從每個頁。所有資產都是通過S3發送的,所以在那裏不應該有任何問題。

僅供參考,這是我的P3P文件;我已經嘗試了絕對路徑,相對路徑,CP和policyref的切換順序,並將兩者分隔開來,但沒有運氣。

header('P3P: CP="NON DSP TAIa PSAa PSDa OUR IND UNI", policyref="/w3c/p3p.xml"'); 

我已確認P3P標題正在被瀏覽器發送和接收。我已經在HTML頁面添加了一個META p3p標籤。我已刪除所有重定向。問題仍然存在。我花了很多時間來研究這個問題,現在我已經沒有想法了。任何有關如何從新的角度來看待這個想法或想法將不勝感激。我在NGINX上使用PHP 5.3.5。沒有框架正在使用...

回答

0

我有同樣的問題。 Facebook的iframe應用程序在除IE7以外的所有瀏覽器中運行良好。當你第一次去應用程序它加載罰款。但是當你點擊一個鏈接時,它會加載頁面,但是在一秒鐘之後會刷新並重定向瀏覽器。最後你只是得到一個空白頁面。我也有紅眼圖標阻止餅乾。

的罪魁禍首竟然是javascript代碼,它加載了Facebook的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 
     }); 

要解決我改變現狀的問題:真正的,到狀態:假。現在點擊鏈接時,頁面加載並不刷新。

所以最近真的在這裏我不知道,但我有一個猜測...重定向是由FB javavascript檢查登錄狀態,並由於某種原因認爲用戶已註銷,因此重定向到一個登錄頁面。我猜想服務器端登錄腳本會看到你確實已經登錄並將你重定向迴應用程序。等等等等。

所以IE7的問題沒有設置在iframe中設置cookie仍然存在,邪惡的眼睛依然存在。但只要iframe中的鏈接引用指向Facebook畫布頁的父窗口target =「_ top」,似乎無論如何您都不需要cookie。 PHP SDK在以$ _REQUEST開頭的許多地方查找會話。我猜測,當facebook加載iframe時,它會在查詢字符串中包含會話參數。所以即使cookie通過iframe在IE7中不起作用,您的服務器腳本仍然會從查詢參數中獲取它們。

希望能使某種感覺,我不完全得到它,但它修復了我的應用程序。

+0

嗨Peter:很有意思,謝謝你的解釋。不幸的是,我們的請求是通過AJAX進行的,所以硬刷新不是一種選擇。我們最終做的是存儲在一個JSON對象所需的數據,並驗證了在提交數據,如果我們有一個有效的會話,否則(IE7),提交的數據。由於該應用程序只能在短時間內運行,因此我們並不太在意僞造的數據。 我們也使用JS SDK殺無效會話(只有這樣,因爲FB的狀態餅乾通過它們的域管理),所以不能去因爲這個原因這條路線也是如此。 – Tyler 2011-02-08 16:15:05

0

我不知道,但也許這會幫助,它像我的應用程序的魅力。

header('P3P: CP="CAO PSA OUR"'); 
ob_start(); 
session_start(); 
相關問題