【问题标题】:Facebook PHP SDK getuser (logout is another tab issue)Facebook PHP SDK getuser(注销是另一个选项卡问题)
【发布时间】:2013-05-20 17:37:08
【问题描述】:

所以基本上作为一个简化的例子,我有 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!

【问题讨论】:

    标签: php facebook facebook-php-sdk


    【解决方案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
    
           }
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 因此造成了很大的问题。如果第一个用户退出 facebook 并忘记退出应用程序,另一个用户如果登录到 facebook 并使用此应用程序可以访问第一个用户的数据和权限
      • 是的,这是一个潜在的安全问题。我将对此进行更深入的研究,并用我的发现更新您
      • 不,我尝试了很多东西,但是要确定用户是否仍然登录 Facebook 是很困难的。所有事件等都只对应于他在您的应用程序上的状态。
      • 嘿,我发布了一个使用 Javascript SDK 的解决方案。显然没有只使用 PHP 的解决方案 :(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 2011-05-31
      • 2013-07-29
      相关资源
      最近更新 更多