所以基本上作为一个简化的例子我有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!
答案 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注销用户。