2014-01-20 36 views
0

我正在爲Facebook做簡單的頁面標籤,但它似乎只在Mac上的Safari上有問題。在Windows上使用Safari,沒有問題。該頁面有三種類型 - fangate(當用戶不喜歡頁面時),主頁面(當喜歡時)和第三頁面的鏈接。當我進入頁面標籤頁時,它顯示了楓葉。然後我「喜歡」該頁面並顯示主頁面,但是當我點擊第三頁的鏈接時,它顯示了我的網頁。我認爲這是失去了signed_request會話。有沒有辦法在不使用會話的情況下在每個頁面上傳遞signed_request?signed_request在safari上消失?

回答

1

我不確定您是否使用PHP SDK。如果是這樣,這個代碼可能適合你。如果找到已簽名的請求(因爲它會在主頁上,而您喜歡該頁面),請將其存儲在會話中。對於之後的每個頁面,檢查簽名請求的會話版本。此代碼必須在每個頁面上進行(包含或不管您選擇)。

<? php 
//get signed request 
$signedRequest = $facebook - > getSignedRequest(); 

//check if inital vars can be used or use session loaded vars 
if (isset($signedRequest)) { 
    echo '<!-- INITIAL LOAD -->'; 
    $_SESSION['signedRequest'] = $signedRequest; 
} else { 
    echo '<!-- STORED SESSION -->'; 
    $signedRequest = $_SESSION['signedRequest']; 
} 

//check like status 
$liked = (!$signedRequest['page']['liked'] ? false : true); 

//check if page is liked 
if ($liked === false) { 
    //********************* NOT LIKED, SHOW LIKE GATE ********************* 
} else { 
    //********************* LIKED, SHOW PAGE CONTENT ********************* 
} 
?> 
0

對不起,對於遲到的答案。是的,我正在使用PHP SDK和您在那裏編寫的完全相同的代碼(檢查signedRequest,如果有的話 - >將它存儲在會話中,否則 - >從會話中獲取它)。但似乎Safari正在丟失會話參數。這兩個方面,我想通了,因爲工作是這些:

  1. 目標都指向_top並添加到它們的參數,所以每次用戶更改頁面,重新加載整個頁面(不僅在iframe)並通過app_data傳遞變量。

  2. 爲每個鏈接添加signedRequest,所以無論用戶什麼時候切換頁面,url中都有signedRequest。這個方法實際上並不刷新整個頁面,因爲它發送的是iframe網站中的參數,所以它比第一個頁面好一點。

這兩種方法都需要在鏈接中傳遞數據,我不想這樣做,因爲我必須更改應用中的每個鏈接。我還沒有試圖將signedRequest存儲在cookie中。

但是,如果還有其他方法,那不需要更改或存儲cookie中的主要鏈接,我很樂意聽到他們的聲音。