2011-10-14 13 views
1

我認爲這很簡單,但我無法弄清楚或找到任何相關搜索結果。我如何確定頁面是否使用PHP在Facebook iframe中加載

我在我的Facebook頁面上有一個頁面標籤,它從iframe中的服務器加載一個頁面。我希望網頁只在Facebook提出請求時纔會提供。

我聽說過看用戶代理,但這不起作用。至少用PHP ......我想。

如果我不得不採取JavaScript重定向,但這只是馬虎。

理想情況下,它看起來像這樣;

<?php 
... 
if (! $is_facebook) 
{ 
    header("HTTP/1.1 404 Not Found"); 
} 
?> 
+0

瀏覽器正在請求它,而不是facebook。 – hakre

+1

我已經回到這裏,並意識到有一個'signed_request'就像@Floyd說的,你可以告訴用戶是否喜歡它的頁面。所以基本上,如果沒有'signed_request',那麼不要提供頁面。 http://developers.facebook.com/docs/appsonfacebook/pagetabs/ – JDavis

+1

另外,如果有重定向,你將不會得到'signed_request'。我沒有得到'signed_request'的原因是因爲我將所有非安全請求重定向到安全請求。因此,頁面選項卡的非安全URL被重定向。實際上,我在狀態代碼爲301的標頭中找到了'signed_request'。 – JDavis

回答

2

。如果你不需要太多的安全性,只要檢查它的存在就足夠了。如果你需要更多的確定性,你可以解碼它來驗證它確實來自Facebook。

+0

我喜歡這個想法,但我沒有得到'signed_request',我想這是因爲它是一個Page Tab而不是一個App。這可能對其他事情有用。 – JDavis

+0

啊,出於某種原因,我以爲你是在談論一個頁面標籤上的應用程序。如果它不是一個應用程序,我不認爲有一個完全確定的方式來知道你的iframe是在Facebook頁面內。 –

+0

我已經回到這裏,並意識到有'signed_request',你可以告訴用戶是否喜歡它的頁面。所以基本上,如果沒有'signed_request',那麼不要提供頁面。 http://developers.facebook.com/docs/appsonfacebook/pagetabs/ – JDavis

0

你不想檢查要檢查引薦你可以只檢查signed_request參數作爲http://developers.facebook.com/docs/authentication/signed_request/所描述的用戶代理,但它並不完全可靠

$_SERVER['HTTP_REFERER'] 
The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted. 
+0

我的印象是'HTTP_REFERER'不會被設置,因爲Facebook直接請求該頁面。 – JDavis

+0

事實證明,iframe和'HTTP_REFERER'的src'是相同的。 – JDavis

相關問題