我正在使用Facebook PHP SDK开发。

我想做到这一点,以便当用户从Facebook登录时,他们也会自动从我的网站上登录。

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

$facebook->getUser();

由于某种原因, getUser() 即使在他们的网站上登录Facebook之后,功能仍然返回用户的Facebook ID。

我是否首先使用另一个功能检测会话?

在官方文件示例中 这里, ,是他们的评论以下摘录:

// 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注销后无法设置吗?

亲切的问候,

卢克

有帮助吗?

解决方案

我有同样的问题!

FB PHP SDK将这些东西保存到$ _Session中!当您的用户单击注销时,您可以这样删除它们:

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

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

我感谢对此的评论和解决方案!

其他提示

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

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

就我而言,我正在使用JavaScript SDK进行所有操作,因此我无法在注销时清理会话。但是在我的着陆页上,我需要进行工作以检查它,然后再将响应发送回响应。

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

问题似乎是在PHP-SDK中 basefacebook.phpline 567

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

此方法返回SDK正在寻找的cookie的名称。但是,JavaScript-SDK使用“ FBS_”前缀。将其更改为“ FBS_”,并且可以正常工作。

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

要销毁会议,您也可以使用:$ facebook-> destroysession();

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top