2011-07-14 54 views
1

我正在開發一個Facebook應用程序。我正在使用Sessions和cookies,並且一切正常。突然IE8在使用Cookie方面存在一些錯誤。它阻止了我的網站,因爲它在iframe中。所以我開始瞭解P3P標題。我正確使用並解決了問題。但是,如果cookie不可用,客戶端現在希望我使用GET。我正在這樣做,但現在我面臨的問題是,Facebook PHP Sdk在會話中遇到問題。它的getSession方法沒有獲取會話並重定向來驗證用戶,然後重定向迴應用程序。但是在這一切中,它都會丟失GET變量PHPSESSID。以下是有一些東西類似的stackoverflow的線程,所以可能是你們以下是有幫助的。 Facebook PHP SDK getSession() fails to get session. Cookie problem?PHP會話與GET有問題的IE8和Facebook應用程序

這是曾經有GET會話如果Cookie不可代碼:

ini_set('session.use_cookies_only', false); 
ini_set('session.use_trans_sid', true); 

session_start(); 

這是訪問FB的代碼。與PHP Sdk會議。:

 $facebook = new Facebook(array(
    'appId' => FACEBOOK_APPID, 
    'secret' => FACEBOOK_SECRET, 
    'cookie' => true, 
    )); 
    $this->facebook=$facebook; 

    // We may or may not have this data based on a $_GET or $_COOKIE based session. 
    // If we get a session here, it means we found a correctly signed session using 
    // the Application Secret only Facebook and the Application know. We dont know 
    // if it is still valid until we make an API call using the session. A session 
    // can become invalid if it has already expired (should not be getting the 
    // session back in this case) or if the user logged out of Facebook. 
    $this->session = $facebook->getSession(); 

請告訴你是否可以給我任何線索。

感謝大家

回答

1

這似乎是與Facebook API一個永無止境的問題。會話功能隨機斷開,你可以做很多事情。我通常在我的應用程序中做的是禁用cookie並將facebook會話存儲在我自己的應用程序SESSION中。每個請求都有一個父控制器,它負責檢查SESSION。如果找到有效的SESSION,它將被設置爲Facebook的會話對象。這確保了在調用getSession()時將返回有效的會話。

+0

實際上,如果我使用Cookie進行會話,它可以正常使用Facebook應用程序,而當我使用GET而不是Cookie來使用會話時,這是問題,這是因爲客戶端需要該應用程序。如果IE瀏覽器在某些未知的情況下不接受cookies,則可以使用。 Howevera非常感謝你的幫助,如果我找不到更好的解決方案,我會考慮這種方式,因爲我認爲我也可以第一次接觸到我的會話,因爲它是第一次接受fb。 Cookie和基於GET的會話問題從第二次開始。 – Hafiz

+0

你是對的,在你的地方,在這個背景下,而我的問題實際上是Kohana會議的問題,因爲我已經想通了。請同時嘗試在那裏幫助我,我也在stackoverflow上提出了這個問題,並邀請你在你的linkedin上解決這個問題。並感謝在這個問題上的幫助。 – Hafiz