$ facebook-> getUser()总是返回ID - 无法注销

时间:2012-01-05 04:57:42

标签: facebook userid

出于某种原因,无论我做什么,这总是返回有效的ID和Facebook信息。要注销,我正在使用Facebook.Logout,重定向到一个页面,我清除所有cookie,包括“fbsr_”。我甚至手动退出Facebook,它仍然返回一个有效的ID!这适用于Facebook Connect应用程序。这是我的应用代码,

$uid = $facebook->getUser();

if ($uid) {
  try {
    $me = $facebook->api('/'+$uid);
  } catch (FacebookApiException $e) {
      echo $e;
    error_log($e);
    $uid = NULL;
  }
}

然后是我的PHP注销代码,

$app_id="XXXX";
session_name('QEW');
session_start();
session_regenerate_id(true);
session_unset();
session_destroy();
$facebook->destroySession();
if (isset($_COOKIE['fbsr_' . $app_id])) 
{
      setcookie('fbsr_' . $app_id, $_COOKIE['fbsr_' . $app_id], time() - 3600, "/");
      setcookie('PHPSESSID', $_COOKIE['PHPSESSID'], time() - 3600, "/");

      unset($_COOKIE['fbsr_' . $app_id]);   
      unset($_COOKIE['PHPSESSID']);
}

修改 我的Javascript代码,

window.fbAsyncInit = function() {
    FB.init({ 
        appId:'XXX', cookie:true, 
        status:true, xfbml:true, oauth:true,
        channelURL:'~~.com/channel.html'
        });
};
(function() {
            var e = document.createElement('script'); e.async = true;
            e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
            e.async = true;
            document.getElementById('fb-root').appendChild(e);
          }());
function login(io)
{
    FB.getLoginStatus(function(response)
    {
        if(response.status == 'connected')
        {
            if(io==1)
            {
                FB.login(function(response) 
                {
                  if (response.authResponse) 
                  {
                     cU(response.authResponse.userID);
                  }
                },{scope:'email'});
            }
            else
            {
                FB.logout(function(response){});
                window.location="./logout.php";
            }
        }
        else
        {
            FB.login(function(response) 
            {
              if (response.authResponse) 
              {
                 cU(response.authResponse.userID);
              }
            },{scope:'email'});
        }
    });
}

然后在“注销”之后,我转到另一个再次调用第一个代码块的页面,它只是重新填充cookie,因为它获得了有效的用户ID。我怎样才能解决这个问题?感谢

1 个答案:

答案 0 :(得分:1)

您通过php删除cookie。之后,在下一个请求JS API恢复它。

从facebook 注销的唯一有效方法是将用户重定向到注销网址:

echo $facebook->getLogoutUrl();

或来自客户端JS API FB.logout();

的相同内容