2013-09-26 28 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询问以确认在范围内要求什么。