2

То, что я пытаюсь сделать, это выйти из моего сайта, когда выходите на выход, но не выходите из Facebook. Это урезанная версия моего кода, адаптированная из примера, предоставленного Facebook.Facebook api php destroySession не уничтожает сессию javascript/cookie

В настоящее время происходит то, что при выходе из системы сеанс уничтожается, страница перезагружается, а затем событие подписывается на auth.login и auth.logout при загрузке страницы и отправляет страницу в цикл перенаправления.

Я пробовал иметь раздел выхода из кода на отдельной странице и давать пользователю ссылку, чтобы щелкнуть, чтобы вернуться на сайт, но снова auth.login запускается на загрузку страницы и регистрирует пользователя.

Что я прошу, так это как я могу уничтожить сеанс таким образом, чтобы не выходить из системы из Facebook, но он не будет автоматически обновлять пользователя на моем сайте. Независимо от того, что я пытаюсь auth.login срабатывает автоматически и повторно авторизует пользователя!

<?php 


require 'include/facebook/facebook.php'; 

$facebook = new Facebook(array(
    'appId' => 'API KEY', 
    'secret' => 'API SECRET', 
)); 

if(isset($_POST['logout'])){ 
$facebook->destroySession(); 



if (isset($_SERVER['HTTP_COOKIE'])) { 
     $cookies = explode(';', $_SERVER['HTTP_COOKIE']); 
     foreach($cookies as $cookie) { 
      $parts = explode('=', $cookie); 
      $name = trim($parts[0]); 
      setcookie($name, '', time()-3600); 
      setcookie($name, '', time()-3600, '/'); 
      setcookie($name, '', time()-3600, '/','MY DOMAIN'); 

     } 
    } 

    $signed_request_cookie = 'fbsr_' . API KEY; 
    setcookie($signed_request_cookie, "", time()-3600, '/', 'MY DOMAIN'); 


} 
// See if there is a user from a cookie 
$user = $facebook->getUser(); 

if ($user) { 
    try { 
    // Proceed knowing you have a logged in user who's authenticated. 
    $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>'; 
    $user = null; 
    } 
} 



?> 
<!DOCTYPE html> 
<html xmlns:fb="http://www.facebook.com/2008/fbml"> 
<body> 
    <?php if ($user) { ?>  


Your user profile is 
    <pre> 
    <?php print htmlspecialchars(print_r($user_profile, true)) ?> 
    </pre> 

    <form action = "" method = "post"> 

    <input type = "submit" name = "logout" value = "logout"/> 
    </form> 
<?php } else { ?> 
    <fb:login-button></fb:login-button> 
<?php } ?> 
<div id="fb-root"></div> 
<script> 
    window.fbAsyncInit = function() { 
    FB.init({ 
     appId: '<?php echo $facebook->getAppID() ?>', 
     channelUrl : '/channel.php', // Channel File 
     cookie: true, 
     xfbml: true, 
     oauth: true, 
     status: true 
    }); 
    FB.Event.subscribe('auth.login', function(response) { 

     alert('logging'); 
     window.location.reload(); 
    }); 
    FB.Event.subscribe('auth.logout', function(response) { 

     alert('logging out'); 
     window.location.reload(); 
    }); 
    }; 
    (function() { 
    var e = document.createElement('script'); e.async = true; 
    e.src = document.location.protocol + 
     '//connect.facebook.net/en_US/all.js'; 
    document.getElementById('fb-root').appendChild(e); 
    }()); 
</script> 
<br /> 
POST: 
<?php 
print_r($_POST); 
?> 

ответ

0

Это похоже на довольно грязный способ сделать это, но я только что закончил загрузку JS Facebook-инициализатора и только запускал его, когда кто-то нажал кнопку входа в FB. Я все еще не уверен, что это ошибка, которую я создал, или недостаток в FB API, если кто-нибудь может дать мне какое-либо указание в любом случае, я был бы благодарен.

function login_fb(){ 


    window.fbAsyncInit = function() { 
     FB.init({ 
     appId: '<?php echo $facebook->getAppID() ?>', 
     channelUrl : '/channel.php', // Channel File 
     cookie: true, 
     xfbml: true, 
     oauth: true, 
     status: true 
     }); 



     FB.Event.subscribe('auth.login', function(response) { 

     window.location.reload(); 
     }); 
     FB.Event.subscribe('auth.logout', function(response) { 

     window.location.reload(); 
     }); 
    }; 
    (function() { 
     var e = document.createElement('script'); e.async = true; 
     e.src = document.location.protocol + 
      '//connect.facebook.net/en_US/all.js'; 
     document.getElementById('fb-root').appendChild(e); 
     }()); 

} 


<a href ="#" onclick = "javascript:login_fb()">login</a> 
0

я замечаю в ваших подписок на события, которые не смотрят на ответ возвращающийся от вызова, и слепо перегрузочных страницу. Вы должны проверить значение ответа и перенаправлять только когда захотите. Я был удивлен тем, что Facebook JS SDK будет запускать эти события, даже когда ответ говорит, что действительно произошло что-то другое.

+0

Объект заполняется информацией о пользователе Facebook и указывает, что они подключены. Это проблема, я уничтожаю сессию и файлы cookie с помощью PHP, а затем JS по какой-то причине может последовать за этим. – MarkR

 Смежные вопросы

  • Нет связанных вопросов^_^