Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Can';t使用Facebook API注销_Php_Facebook_Api - Fatal编程技术网

Php Can';t使用Facebook API注销

Php Can';t使用Facebook API注销,php,facebook,api,Php,Facebook,Api,因此,我创建了这个基本代码,用于使用Facebook登录/注销。一分钟前一切正常,我在换东西,然后突然,我无法注销。我将代码简化为纯粹的登录/退出行,但仍然不起作用。我从未看到登录链接。即使我单击“注销”,我仍然可以看到我的电子邮件,因此显然我仍然可以访问我的facebook信息。 这个api快把我逼疯了,只是今天早上getUser()总是返回0,不管我是否登录,现在情况正好相反——它总是返回一个用户,即使我注销 <?php require '../facebook-php-sdk

因此,我创建了这个基本代码,用于使用Facebook登录/注销。一分钟前一切正常,我在换东西,然后突然,我无法注销。我将代码简化为纯粹的登录/退出行,但仍然不起作用。我从未看到登录链接。即使我单击“注销”,我仍然可以看到我的电子邮件,因此显然我仍然可以访问我的facebook信息。 这个api快把我逼疯了,只是今天早上getUser()总是返回0,不管我是否登录,现在情况正好相反——它总是返回一个用户,即使我注销

<?php
    require '../facebook-php-sdk/src/facebook.php'; 
    $appID = '175698905xxxxxx';
    $secret = 'cc8f99df86f7978c67xxxxxxxxxxxxx';
    $facebook = new Facebook(array(
      'appId'  => $appID,
      'secret' => $secret
        ));

    // Get User ID
    $user = $facebook->getUser();   
    $loginUrl = $facebook->getLoginUrl(array('req_perms' => 'email,read_stream,user_birthday'));
    $logoutUrl = $facebook->getLogoutUrl();
    if (!$user)
    {
        echo '<p><a href='.$loginUrl.'>Log in.</a></p>';
    }
    else
    {
        echo '<p><a href='.$logoutUrl.'>Log out.</a></p>';  
    }
    $user_profile = $facebook->api('/me');  
    echo $user_profile['email'];
?>


更新:好的,我想代码是好的,如果我尝试从另一台计算机上使用它,它第一次工作正常,但在我登录后,注销链接不再工作。

很难知道发生了什么,因为你的代码有点正常。
考虑重新设置你的应用程序的秘密,从你的应用程序列表中删除应用程序(在你的测试用户或你的配置文件中,如果你不使用测试用户),清除你的缓存。 另外,为了测试是否没有其他事情发生,将API调用放入try/catch中,看看它是否引发异常

if ($user) {
    try {
        $user_profile = $facebook->api('/me');
    } catch (FacebookApiException $e) {
        error_log($e);
        $user = null;
    }
}
正如劳伦斯所提到的

。。。方法返回当前用户的Facebook用户ID,如果没有登录用户,则返回0

因此,与其做额外的工作,为什么不直接切换它,以便如果在中定义了$user,则调用注销URL

if ($user) {
    $logoutUrl = $facebook->getLogoutUrl();
} else {
    $loginUrl = $facebook->getLoginUrl(array('scope' => 'email,read_stream,user_birthday'));
}

请注意,我使用的是
scope
,这是最新PHPSDK中权限数组的公认方式

@phwd的解决方案非常棒。我使用以下setcookie()行对其进行了增强:


我希望这能帮助您解决进一步的问题。

$logoutUrl
从facebook注销。 要清除检索到的数据,必须清除整个会话

<a href='?sessionEnd'>seesion end</a>"

if(isset($_GET['sessionEnd'])){
    session_destroy();
    setcookie('PHPSESSID',false);   
    header('Location: /');
    exit();
}
”
if(isset($\u GET['sessionEnd'])){
会话_destroy();
setcookie('PHPSESSID',false);
标题('位置:/');
退出();
}
<a href='?sessionEnd'>seesion end</a>"

if(isset($_GET['sessionEnd'])){
    session_destroy();
    setcookie('PHPSESSID',false);   
    header('Location: /');
    exit();
}