После выхода из Facebook Connect PHP-класс Facebook по-прежнему считает, что пользователь вошел в систему - PullRequest
2 голосов
/ 24 октября 2009

Когда пользователь впервые заходит на экран входа в систему моего сайта, у меня Facebook Connect определяет, вошел ли пользователь в Facebook и перезагрузит страницу, если true:

<script type="text/javascript" src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php"></script>

<script type="text/javascript">
  FB.init('MY_API_KEY', '/xd_receiver.htm', { 'reloadIfSessionStateChanged': true });
</script>

Когда страница перезагружается, мой бэкэнд-код PHP проверяет, вошел ли пользователь в Facebook, а затем автоматически регистрирует его на моем сайте:

$Facebook = new Facebook(MY_API_KEY, MY_APP_SECRET);

if ($Facebook->get_loggedin_user()) {
  // Log the user in.
}

Эта часть отлично работает. Проблема в функциональности выхода из системы. Моя ссылка для выхода из системы выглядит сейчас так:

<a href="#" onclick="FB.Connect.logoutAndRedirect('http://my.url/logout/');">Log Out</a>

При щелчке пользователь успешно вышел из Facebook, но внутренний PHP-объект Facebook по-прежнему считает, что пользователь вошел в систему ($Facebook->get_loggedin_user() по-прежнему возвращает его идентификатор пользователя), поэтому мой код входа в систему затем снова автоматически регистрирует его .

Итак, проблема, с которой я сталкиваюсь, заключается в том, что, несмотря на то, что Facebook Connect выводит пользователя из системы, бэкэнд PHP-объекта Facebook по-прежнему считает, что пользователь вошел в систему. Кто-нибудь знает, как это преодолеть? Могу ли я не войти в систему автоматически с помощью моего кода PHP?

Спасибо за любую помощь!

Ответы [ 3 ]

5 голосов
/ 26 октября 2009

Я только что помог кому-то с похожей проблемой. По сути, вам нужно прервать сеанс на Facebook, а затем очистить куки (это немного сложно и не очень хорошо объясняется в документах):

Как выйти из системы с помощью Facebook Connect в PHP и Zend?

Проголосуй, если поможет;)

1 голос
/ 14 сентября 2011

Поскольку я должен был очистить сеанс ЗАВЕРШЕНО (пользователь должен выйти из системы), для меня это работало совершенно нормально:

1.) Выйдите из системы на Facebook:

$redirectUrl = $this->getFacebook()->getLogoutUrl(array(
            'next' => $this->baseUrl.'/logout',
        ));
$this->redirect($redirectUrl);

2.) Выйдите из пользователя в моем веб-приложении после возврата из Facebook:

public function logoutAction()
{
        session_destroy();        
        // redirect back to start page
        return $this->redirect($this->baseUrl);
}
0 голосов
/ 24 октября 2009

Можете ли вы установить собственную переменную для пометки, когда это происходит, в качестве обходного пути?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...