Facebook PHP SDK getuser(注销是另一个选项卡问题)

时间:2013-05-20 17:37:08

标签: php facebook facebook-php-sdk

所以基本上作为一个简化的例子我有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并加载此页面,它基本上会打印用户的脸书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!

2 个答案:

答案 0 :(得分:1)

好的,没有简单的方法,但我已经用hacky方式解决了这个问题,即使用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

       }
    }
}

答案 1 :(得分:0)

当用户从Facebook注销时,用户不会退出您的应用程序。 Facebook和您的应用程序都不共享共同的常见会话。但是,当触发应用程序的注销时,它也会从Facebook注销用户。