Как выйти из системы с помощью facebook SDK?

Я использую журнал facebook для моего веб-сайта, используя facebook php sdk .

Я заметил, что ссылка на logout не делает ничего. После выхода из системы пользователь может перемещаться по сайту. Вот мой код в facebook.php :

 <?php require 'src/facebook.php'; $facebook = new Facebook(array( 'appId' => '*************', 'secret' => '******************************', )); $user = $facebook->getUser(); $loginUrl = $facebook->getLoginUrl(); echo "<a href='$loginUrl'>login</a>"; $logoutUrl = $facebook->getLogoutUrl(); echo $loginUrl; if($user){ session_start() ; $_SESSION['user_info'] = $user; $_SESSION['user_pro']= $facebook->api('/me'); print_r($_SESSION); } else{ echo 'not logged in '; } echo "<a href='example.com/logout.php'>log out </a>" ?> 

Этот code отлично работает при входе в систему. Выходная ссылка должна уничтожить сеанс. Вот заголовок страницы:

 <?php print_r($_SESSION) ; header('example.com') ; ?> 

Проблема с моей страницей logout.php заключается в том, что она вообще не обнаруживает сеанс. Я не знаю, является ли это проблемой facebook api или моей проблемой php .

Как вы регистрируете пользователя, используя SDK facebook?

Вы можете выйти из своего сайта, а также из facebook, как описано ниже, указав URL-адрес своего сайта на следующий параметр и уничтожить сеанс

 $token = $facebook->getAccessToken(); $url = 'https://www.facebook.com/logout.php?next=' . YOUR_SITE_URL . '&access_token='.$token; session_destroy(); header('Location: '.$url); 

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

Отключите код, который автоматически регистрируется в вашем пользователе, и попробуйте снова выйти из системы. Уничтожение сеанса не помешает вашему сайту создать новый действующий сеанс для запоминающегося пользователя.

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

logout.php:

 <?php require_once("facebook-php-sdk-6c82b3f/src/facebook.php"); $config = array(); $config['appId'] = '2911111111146'; $config['secret'] = 'a6eaaaaaaaaaaaaaaaaaaaaaaaaaad1a'; $config['fileUpload'] = false; $facebook = new Facebook($config); $logouturl = $facebook->getLogoutUrl(); $_SESSION['user_facebook_email'] = ""; $_SESSION['ask_user_to_login'] = true; header("Location: showquestions.php"); ?> 

index.php:

 <?php require_once("facebook-php-sdk-6c82b3f/src/facebook.php"); $config = array(); $config['appId'] = '2911111111146'; $config['secret'] = 'a6eaaaaaaaaaaaaaaaaaaaaaaaaaad1a'; $config['fileUpload'] = false; $facebook = new Facebook($config); $userId = $facebook->getUser(); if ($_SESSION['ask_user_to_login'] == true || $userId == 0){ $loginUrl = $facebook->getLoginUrl(); $_SESSION['ask_user_to_login'] = false; echo "<button type='button' onClick=\"window.location='$loginUrl'\">" . "<img src='picture.gif' alt='Login with facebook'/>" . "</button>"; exit; } else { $userInfo = $facebook->api('/' + $userId); session_cache_expire (150000); //set the cache expire to 15000 minutes $_SESSION['user_facebook_email'] = $userInfo['email']; $_SESSION['facebook'] = $facebook; header("Location: showquestions.php"); } $userInfo = $facebook->api('/' + $userId); echo "Welcome" . $userInfo['email']; ?> 

login.php:

 <?php session_start(); if (isset($_SESSION['user_facebook_email']) !== true || $_SESSION['user_facebook_email'] == "") { header("Location: index.php"); exit; } ?> 

Затем в каждом файле php, который вы хотите запретить доступ без входа в систему, поместите это вверху:

 <?php require("log2.php"); ?> 

С помощью этого кода пользователь регистрируется автоматически, и если они вызывают код выхода, сайт не позволит им до тех пор, пока они снова не войдут в систему.

ОТВЕТ

  $_SESSION['fb_(your_APP_ID)_access_token'] = '' ; 

когда вход в сеанс инициализируется, кажется, что если мы установим любую из этих переменных session в нуль, это нарушит функцию входа в систему и попросит пользователя снова войти в систему

Извлечение пользователей из facebook может быть затруднено. Это работает для меня

 // Get an instance of the Facebook class $facebook = $this->facebook_instance_factory(); // Destroy the session so that no Facebook data is held $facebook->destroySession(); $logout = $facebook->getLogoutUrl(); $facebook->setAccessToken(''); // Redirect the user to the logout url, facebook will redirect him to our page wp_redirect( $logout ); 

Вам нужно вызвать session_start() на всех страницах, где будут использоваться сеансы.

Чтобы зарегистрировать кого-нибудь из сеанса (т. session_destroy() его), вы можете использовать session_destroy() .

Наконец, header('example.com'); на самом деле ничего не предпримут, собираетесь ли вы перенаправлять? Если это так, вы должны использовать `header ('Location: http://example.com/ ');

EDIT: Извините, что я не читал это правильно, что такое второй фрагмент кода? Это ваша страница logout.php?

Насколько мне известно в API Facebook, когда вы вызываете getLogoutUrl() , вы должны отправлять своих пользователей, когда они нажимают на ссылку, а не на свой собственный logout.php .