2013-01-14 37 views
4

在我的Facebook應用程序,有兩個文件的index.php和write.php使用這種基本代碼:Facebook應用程序,結果局部變化,並在Heroku

require_once('AppInfo.php'); 
if (substr(AppInfo::getUrl(), 0, 8) != 'https://' && $_SERVER['REMOTE_ADDR'] != '127.0.0.1') { 
    header('Location: https://'. $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); 
    exit(); 
} 
require_once('utils.php'); 
require_once('sdk/src/facebook.php'); 

$facebook = new Facebook(array(
    'appId' => AppInfo::appID(), 
    'secret' => AppInfo::appSecret(), 
)); 
$user_id = $facebook->getUser(); 

在index.php之後被加載,一個ajax請求被髮送到write.php,它將查詢發送到Facebook並將結果寫入文本文件。 write.php使用相同的代碼來初始化Facebook對象。

在本地測試時可以正常工作,但在上傳到Heroku後會產生任意結果。 $ user_id爲空,如果($ user_id)或$ user_id的值爲0,則代碼無法超越,這會在稍後引發異常。

+0

都是64位的環境? – datasage

+0

我的本地機器是32位。它是如何產生影響的? – dilpreet023

+0

我的原始問題必須與32位和64位環境中的整數長度有關。 Facebook API可能會將數字視爲字符串並避免這種限制。但是,看起來0的結果意味着用戶未登錄。用戶是否在登錄此代碼之前進行了身份驗證? – datasage

回答

1

Facebook SDK將登錄數據存儲在會話中。由於您的對write.php的AJAX請求沒有發送完整的Facebook POST數據,因此facebook類假定沒有簽名請求,因此沒有數據。

我遇到了相同的行爲,並且問題總是會話未正確建立。不幸的是我不太確定,究竟是什麼原因。