$facebook->getUser() ВСЕГДА Возвращать идентификатор - не удается выйти

По какой-то причине, независимо от того, что я делаю, это всегда возвращает действительный идентификатор и информацию Facebook. Чтобы выйти из системы, я использую Facebook.Logout, перенаправляя на страницу, где я очищаю ВСЕ куки, включая "fbsr_". Я даже вышел из Facebook вручную, и он все еще возвращает действительный идентификатор! Это для приложения Facebook Connect. Вот мой код приложения,

$uid = $facebook->getUser();

if ($uid) {
  try {
    $me = $facebook->api('/'+$uid);
  } catch (FacebookApiException $e) {
      echo $e;
    error_log($e);
    $uid = NULL;
  }
}

Тогда мой код выхода из PHP,

$app_id="XXXX";
session_name('QEW');
session_start();
session_regenerate_id(true);
session_unset();
session_destroy();
$facebook->destroySession();
if (isset($_COOKIE['fbsr_' . $app_id])) 
{
      setcookie('fbsr_' . $app_id, $_COOKIE['fbsr_' . $app_id], time() - 3600, "/");
      setcookie('PHPSESSID', $_COOKIE['PHPSESSID'], time() - 3600, "/");

      unset($_COOKIE['fbsr_' . $app_id]);   
      unset($_COOKIE['PHPSESSID']);
}

РЕДАКТИРОВАТЬ мой код Javascript,

window.fbAsyncInit = function() {
    FB.init({ 
        appId:'XXX', cookie:true, 
        status:true, xfbml:true, oauth:true,
        channelURL:'~~.com/channel.html'
        });
};
(function() {
            var e = document.createElement('script'); e.async = true;
            e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
            e.async = true;
            document.getElementById('fb-root').appendChild(e);
          }());
function login(io)
{
    FB.getLoginStatus(function(response)
    {
        if(response.status == 'connected')
        {
            if(io==1)
            {
                FB.login(function(response) 
                {
                  if (response.authResponse) 
                  {
                     cU(response.authResponse.userID);
                  }
                },{scope:'email'});
            }
            else
            {
                FB.logout(function(response){});
                window.location="./logout.php";
            }
        }
        else
        {
            FB.login(function(response) 
            {
              if (response.authResponse) 
              {
                 cU(response.authResponse.userID);
              }
            },{scope:'email'});
        }
    });
}

Затем, после выхода из системы, я перехожу на другую страницу, которая снова вызывает первый блок кода, и он просто заполняет файлы cookie, потому что возвращает действительный идентификатор пользователя. Как я могу это исправить? Спасибо

1 ответ

Решение

Вы удаляете cookie по php. После этого по следующему запросу JS API восстанавливает его.

Единственный и правильный способ выхода из Facebook - перенаправить пользователя на URL выхода:

echo $facebook->getLogoutUrl();

или то же самое из клиентского JS API FB.logout ();

Другие вопросы по тегам