То, что я пытаюсь сделать, это выйти из моего сайта, когда выходите на выход, но не выходите из 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);
?>
Объект заполняется информацией о пользователе Facebook и указывает, что они подключены. Это проблема, я уничтожаю сессию и файлы cookie с помощью PHP, а затем JS по какой-то причине может последовать за этим. – MarkR