【问题标题】:$facebook->getUser() ALWAYS Returning ID - Can't Logout$facebook->getUser() 总是返回 ID - 无法注销
【发布时间】:2012-02-03 00:05:19
【问题描述】:

出于某种原因,无论我做什么,它总是返回一个有效的 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。我怎样才能解决这个问题?谢谢

【问题讨论】:

  • 你使用客户端FB JS API吗?
  • 我正在从服务器获取他们的库。我将代码编辑到问题中。

标签: facebook userid


【解决方案1】:

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

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

echo $facebook->getLogoutUrl();

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

【讨论】:

  • 啊,我明白发生了什么。但即使使用该链接仍然会导致 API 在我返回页面时恢复它。它不会永久注销我。基本上发生的情况是我在主页上并单击注销按钮,使用 FB.Logout 将我注销,然后调用 logout.php,然后再次重新加载主页。当它再次重新加载主页时,它正在捕获 JS 中的 API 调用以再次创建它。使用注销 URL 做同样的事情,当它再次加载主页时,它会被重新填充。
  • @Tanner:只要您将用户重定向到注销页面 - 用户正在从 Facebook 注销,所以您应该在你的应用
  • 老实说,我什至无法让 facebook.com/logout.php?access_token=... 通过浏览器工作。它只是不断重定向到 /home.php :\
  • echo $facebook->getLogoutUrl(); 返回什么?
  • @Tanner:要明确我没有经历过这样的行为,对我来说注销工作正常。现在没有时间设置空白应用程序来检查它,对不起。但是您可以尝试 facebook php sdk 示例。我怀疑它不起作用
猜你喜欢
  • 1970-01-01
  • 2013-11-30
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
  • 2012-01-19
相关资源
最近更新 更多