2009-10-02 89 views
1

我不確定php服務器端Facebook庫是否驗證加載的會話。那麼我想知道是否有最佳做法確保我確實有一個有效的FB會話,而不是一些餅乾改變$ _COOKIE數據。測試Facebook會話是否有效?

$fb = new Facebook(); 

if($fb->session_expires !== 0 && $fb->session_expires < time()) { 
die('bad and/or old session'); 
} 

還是更好地測試用戶的FB ID?

$fb = new Facebook(); 

if($fb->user) { 
die('no Facebook User Id given'); 
} 

編輯: 好,according to facebook通過使用應用程序祕密MD5所有PARAMS和驗證哈希「客戶端庫應該執行爲您的所有必要的驗證」。所以如果你有一個會話 - 這是一個有效的FB生成的(儘管它仍然可以過期)。

假設您登錄到連接應用程序。然後你註銷FB。如果您在該連接應用程序中加載另一個頁面,則FB JS沒有任何機會更改cookie以表明您實際註銷了該cookie。而且由於PHP庫實際上並沒有調用FB來驗證你的會話,所以它也不知道刪除不好的值。

結果是,你有一組有效的FB發送的cookies不再有用。所以你應該嘗試調用一個需要會話的API方法,那麼你的應用將會拋出一個致命的錯誤。

回答

0

調用API方法$facebook->getUser(),並應檢查用戶是否有效。

https://github.com/facebook/facebook-php-sdk/blob/master/src/base_facebook.php#L508

由於在SDK

// Get User ID 
$user = $facebook->getUser(); 

// We may or may not have this data based on whether the user is logged in. 
// 
// If we have a $user id here, it means we know the user is logged into 
// Facebook, but we don't know if the access token is valid. An access 
// token is invalid if the user logged out of Facebook. 

if ($user) { 
    try { 
    // Proceed knowing you have a logged in user who's authenticated. 
    $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    $user = null; 
    } 
} 
+0

誰知道3年前有一個答案提供的例子。自從(顯然)接受這個測試以來,這是現在做事情的方式。 – Xeoncross 2013-06-12 16:06:47

0

逾期的答案,但目前Facebook的PHP類有一個getSession()方法:

if ($facebook->getSession()) { 
    // Do stuff 
}