Я использую журнал 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
.