1

所以基本上作为一个简化的例子,我有 2 个文件。一个是 index.php 文件,一个是 logout.php 文件。

我的 index.php 文件包含类似这样的内容(我已经删除了不必要的代码行。假设用户已经验证了我的应用程序):

require_once "class/facebook/config.php";
try{
    include_once "facebook.php";
}catch(Exception $e){
    error_log($e);
}

// Create our application instance
$facebook = new Facebook(array(
    'appId'     => APP_ID,
    'secret'    => APP_SECRET,
    'cookie'    => true,
    'domain'    => REDIRECT_URI,
    ));

// Get User ID
$user = $facebook->getUser();
print_r($user);

因此,如果我登录 facebook 并加载此页面,它基本上会打印用户 facebook id。到目前为止工作良好。

要注销,假设我使用 logout.php,其中包含类似的内容,

require_once "class/facebook/config.php";

try{
    include_once "class/facebook/facebook.php";
}catch(Exception $e){
    error_log($e);
}

$facebook = new Facebook(array('appId'  => APP_ID, 'secret' => APP_SECRET, 'cookie' => true));
$facebook->destroySession();
header('location:'.REDIRECT_URI);

当我加载此页面时,我退出了 facebook 和我的应用程序,并被重定向到我的索引页面。一路顺风顺水!现在,由于 index.php 加载并且我已注销,因此打印了 0。那看起来也不错。

让我们稍微改变一下场景。假设我们登录到 facebook 并加载 index.php。效果很好,返回用户 ID。美好的。现在假设我们打开另一个选项卡,转到 facebook.com。然后我们直接从 facebook.com 注销。

现在,当我们在之前的选项卡中刷新 index.php 时,当用户实际上已经从 facebook 注销时,它仍然显示旧的用户 ID!

4

2 回答 2

1

好的,这没有简单的方法,但我已经解决了这个问题,即使用 javascript sdk 来检查这是否是同一个用户。这就是我如何做到这一点。

FB.api('/me', function(response) {
if (response.id){
       if (response.id == <?php echo $_SESSION['userid'];?>){

           // proceed with whatever you have to do

       }else{

           // user has changed or user has logged out separately from facebook
           alert("We don't know you anymore!");
           // code to proceed to logout or fire re-login option

       }
    }
}
于 2013-05-27T17:02:56.310 回答
0

当用户从 Facebook 注销时,用户不会从您的应用程序中注销。Facebook 和您的应用程序不共享公共会话。但是,当您的应用程序的注销被触发时,它也会从 Facebook 注销用户。

于 2013-05-21T11:36:33.393 回答