我正在开发使用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退出时失效吗?
亲切的问候,
路
答案 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();