2013-09-26 26 views
1

我使用的是FB PHP SDK登錄用戶沒有看中這裏 - 只是打電話$fb->getLoginUrl()生成登錄鏈接,用戶經過它,授權,被反彈到我的網站,他們已登錄。到目前爲止,這很好。Facebook的PHP SDK迴歸用戶ID即使註銷

在一個頁面reserveed爲登錄用戶的我有這樣的代碼:

echo $fb->getUser(); //supposedly outputs user ID or 0 on failure 

但事實是它輸出的用戶ID 即使我手動去Facebook和註銷它 。它似乎從來沒有爲我輸出0,即檢測到我已註銷。

我錯過了什麼?有沒有更好的方法來檢測登錄狀態?

(注:JS SDK是不是我的選擇)

+0

,因爲你沒有使用JS SDK,它可能需要一點點,直到,你不再登錄服務器端另行通知。 –

+0

嗯,不知道是因爲我只是試圖再次,登錄後約兩個小時出FB,它仍然返回我的用戶ID! – Utkanos

+0

訪問令牌何時會過期?看來,你的應用程序爲您的信息persisted.Try莫名其妙的餅乾將Facebook個人資料和刪除權限爲您的應用程序/網站,lougout然後再次嘗試檢查,如果它仍返回fb_id –

回答

1

嘗試使用destroySession方法,並且還當你想註銷終止會話變量。

include('fb-php-sdk/facebook.php'); 
$config = array(); 
$config['appId'] = '641xxxx559'; 
$config['secret'] = '3bxxxxxxcd1c'; 

$facebook = new Facebook($config); 

if(isset($_GET['act']) && $_GET['act'] == "logout") { 
    $facebook->destroySession(); 

      // destroy session var here. Should be in format of "fmb_$appID" 
} 


$user = $facebook->getUser(); 
echo $user; 
if ($user) { 

    try { 
    // Proceed knowing you have a logged in user who's authenticated. 
    $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>'; 
    $user = null; 
    } 
    echo "<pre>"; 
    print_r($user_profile); 
    echo "</pre>"; 
    $logout = $facebook->getLogoutUrl(); 

    //echo $logout; 

    echo "<a href='test.php?act=logout'>Logout</a>"; 


} else { 

    $login = $facebook->getLoginUrl(array("scope"=>"email","display"=>"popup","redirect_uri"=>"http://domain.com/test.php")); 

    echo "<a href='".$login."'>Login</a>"; 

} 

正如你所看到的,我在params數組中傳遞了範圍鍵來請求我想要的東西。第一次運行時,用戶將被facebook詢問以確認在範圍內要求什麼。