Facebook getUser()函数在注销后返回用户ID

时间:2011-09-04 22:35:44

标签: facebook facebook-php-sdk

我正在开发使用Facebook PHP SDK。

我想这样做,以便当用户退出Facebook时,它们也会自动退出我的网站。

我使用以下代码来检测会话,使用会话cookie:

$facebook->getUser();

出于某种原因,getUser()功能仍会返回用户的Facebook ID,即使他们已经在他们的网站上退出Facebook。

我是否首先使用其他功能检测会话?

在官方文档示例here中,以下是他们评论的摘录:

// 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.

这让我相信Facebook的会话cookie会在Facebook退出时失效吗?

亲切的问候,

5 个答案:

答案 0 :(得分:12)

我有同样的问题!

FB PHP SDK将这些内容保存到$ _SESSION中! 当您的用户点击退出时,您可以将其删除:

$_SESSION['fb_'.APP_ID.'_user_id'] = '';
$_SESSION['fb_'.APP_ID.'_access_token'] = '';

虽然这不是最终解决方案,但现在可以使用。

我很感激评论和解决方案!

答案 1 :(得分:3)

我想提供一个替代方案,在某种程度上你不必处理会话内容。虽然,我必须警告你,这比清理会话要慢,因为它依赖于新的请求。我们在下面的代码中所做的是检查Facebook是否仍然有效。这是:

try {
    $facebook->api('/me','GET');
    $logged = true;
} catch(FacebookApiException $e) {
    $logged = false;
}

在我的情况下,我使用JavaScript SDK做了所有事情,所以我无法在注销时清理会话。但是在我的目标网页中,我需要在发送回复之前进行检查。

如果你面对这样的事情,绝对是一个很好的解决方案。

答案 2 :(得分:2)

问题似乎出现在basefacebook.php line 567的php-sdk中

         protected function getSignedRequestCookieName() {
         return 'fbsr'.$this->getAppId();}

此方法返回sdk正在查找的cookie的名称。但是,javascript-sdk使用'fbs_'前缀。将其更改为'fbs_',它可以正常工作。

return 'fbs'.$this->getAppId();}

答案 3 :(得分:1)

$facebook->destroySession();

答案 4 :(得分:0)

要销毁会话,您还可以使用:         $ facebook-> destroySession();