Facebook api php destroySession не уничтожает сессию JavaScript / cookie - PullRequest
2 голосов
/ 15 февраля 2012

Я пытаюсь выйти из моего веб-сайта при попытке выйти из системы, но не выйти из Facebook.Это урезанная версия моего кода, адаптированная на примере, предоставленном Facebook.

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

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

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

<code><?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)).'
';$ user = null;}}?>выйти window.fbAsyncInit = function () {FB.init ({appId: 'getAppID ()?> ', channelUrl:' /channel.php ', // Файл 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'; документ.getElementById ('fb-root'). appendChild (e);} ());СООБЩЕНИЕ:

Ответы [ 2 ]

0 голосов
/ 16 февраля 2012

Это похоже на довольно грязный способ сделать это, но я только что закончил оборачивать инициализатор 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 голосов
/ 15 февраля 2012

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

...