Facebook PHP SDK即使在注销后仍返回用户ID

Facebook PHP SDK即使在注销后仍返回用户ID,php,facebook,authentication,sdk,Php,Facebook,Authentication,Sdk,我正在使用FB PHP SDK登录用户。这里没什么特别的-只需调用$fb->getLoginUrl()生成登录链接,用户通过它,授权,被返回到我的站点,他们就可以登录了。到目前为止,一切顺利 在为登录用户保留的页面上,我有以下代码: echo $fb->getUser(); //supposedly outputs user ID or 0 on failure 但问题是,即使我手动进入Facebook并注销,它也会输出用户ID。它似乎从未为我输出0,即检测到我已注销 我错过了什么?有没

我正在使用FB PHP SDK登录用户。这里没什么特别的-只需调用
$fb->getLoginUrl()
生成登录链接,用户通过它,授权,被返回到我的站点,他们就可以登录了。到目前为止,一切顺利

在为登录用户保留的页面上,我有以下代码:

echo $fb->getUser(); //supposedly outputs user ID or 0 on failure
但问题是,即使我手动进入Facebook并注销,它也会输出用户ID。它似乎从未为我输出
0
,即检测到我已注销

我错过了什么?有没有更好的方法来检测登录状态


(注意:JSSDK不是我的选择)

尝试使用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>";

}
include('fb-php-sdk/facebook.php');
$config=array();
$config['appId']='641xx559';
$config['secret']='3BXXXXXCD1C';
$facebook=newfacebook($config);
如果(设置($\u GET['act'])&&&$\u GET['act']==“注销”){
$facebook->destroySession();
//此处销毁会话变量。格式应为“fmb_u$appID”
}
$user=$facebook->getUser();
echo$user;
如果($user){
试一试{
//继续,知道您有一个经过身份验证的登录用户。
$user_profile=$facebook->api('/me');
}捕获(FacebookApiException$e){
回显'.htmlspecialchars(print_r($e,true))';
$user=null;
}
回声“;
打印(用户档案);
回声“;
$logout=$facebook->getLogoutUrl();
//echo$注销;
回声“;
}否则{
$login=$facebook->getLoginUrl(数组(“范围”=>“电子邮件”,“显示”=>“弹出窗口”,“重定向”=>)http://domain.com/test.php"));
回声“;
}

正如您所看到的,我正在传递params数组中的scope键,以请求返回我想要的内容。首次运行此功能时,facebook将要求用户确认在作用域中请求的内容。

尝试使用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>";

}
include('fb-php-sdk/facebook.php');
$config=array();
$config['appId']='641xx559';
$config['secret']='3BXXXXXCD1C';
$facebook=newfacebook($config);
如果(设置($\u GET['act'])&&&$\u GET['act']==“注销”){
$facebook->destroySession();
//此处销毁会话变量。格式应为“fmb_u$appID”
}
$user=$facebook->getUser();
echo$user;
如果($user){
试一试{
//继续,知道您有一个经过身份验证的登录用户。
$user_profile=$facebook->api('/me');
}捕获(FacebookApiException$e){
回显'.htmlspecialchars(print_r($e,true))';
$user=null;
}
回声“;
打印(用户档案);
回声“;
$logout=$facebook->getLogoutUrl();
//echo$注销;
回声“;
}否则{
$login=$facebook->getLoginUrl(数组(“范围”=>“电子邮件”,“显示”=>“弹出窗口”,“重定向”=>)http://domain.com/test.php"));
回声“;
}

正如您所看到的,我正在传递params数组中的scope键,以请求返回我想要的内容。第一次运行此功能时,facebook会要求用户确认此功能范围内的任何请求。

由于您没有使用JS SDK,可能需要一点时间,服务器端才会注意到您不再登录。嗯,不确定,因为我刚刚再次尝试,在注销FB大约两个小时后,它还在返回我的用户ID!访问令牌何时到期?你的应用程序的cookie似乎以某种方式保留了你的信息。尝试转到你的facebook个人资料,删除你的应用程序/网站的权限,lougout,然后再次尝试检查它是否仍然返回fb_ID。因为你没有使用JS SDK,可能需要一点时间,直到服务器端注意到你不再登录。嗯,不确定,因为我刚刚再试了一次,在注销FB大约两个小时后,它仍然返回我的用户ID!访问令牌何时到期?你的应用程序的cookie似乎以某种方式保留了你的信息。请尝试转到你的facebook个人资料,删除你的应用程序/网站的权限,lougout,然后再次尝试检查它是否仍然返回FBU id