Файлы cookie Facebook сохраняются до обновления вручную - PullRequest
0 голосов
/ 05 марта 2011

Я создаю сайт PHP, который использует Facebook OAuth в качестве механизма входа в систему. Проблема в том, что когда пользователь выходит из системы и перенаправляется обратно на мой сайт, сайт по-прежнему эффективно регистрируется (по крайней мере, на вид), пока пользователь не обновит страницу вручную.

Я подозреваю, что причина этого в том, что файлы cookie Facebook удаляются только после того, как страница возврата закончила рендеринг. Я согласен, что не совсем разбираюсь в том, как работают сессии.

Пользователь выходит из системы -> Перенаправить на Facebook -> Перенаправить обратно на сайт (logout.php) -> Очистить локальную сессию -> Перенаправить на домашнюю страницу (index.php) -> Страница рендеринга (все еще вошли в систему) -> печенье удалено -> Обновление вручную (index.php) -> Отображение страниц (больше не вошли в систему).

У меня недавно была похожая проблема с сайтом ASP.NET MVC. Мое исправление заключалось в том, чтобы проанализировать страницу с помощью JavaScript после загрузки страницы и после окончательного удаления файлов cookie.

Я работаю в предположении, что я делаю что-то не так. Я просто хочу, чтобы index.php распознал, что Facebook вышел из системы без обновления.

Я использую header() для перенаправления из logout.php в index.php.

header("Location: index.php");

EDIT: Я попытался добавить текущее время в URL перенаправления, чтобы избежать проблем с кэшированием. Это не помогло.

EDIT: Наблюдение за активностью файлов cookie в FireCookie подтверждает мое подозрение, что файл cookie Auth удаляется после отображения страницы. Это явно не является окончательным, поскольку FireCookie не показывает мне, что происходит на стороне сервера.

JS Обходной путь: Мой текущий обходной путь - запустить следующий фрагмент при загрузке страницы, где $ fbUid - это идентификатор пользователя Facebook. Хотя это не идеально, потому что он опирается на JavaScript.

        FB.getLoginStatus(function(response) {
            if (<?php echo $fbUid ? "true" : "false" ?> && response.session == null)
                window.location.reload();
        });

Rich

Ответы [ 3 ]

0 голосов
/ 06 марта 2011

Взломал его с помощью Удалите файл cookie сеанса facebook из моего приложения при выходе пользователя из системы и источнике SDK.

Добавление этого фрагмента кода на страницу выхода из системы гарантирует, что аутентификация удалена.

$facebook = new Facebook(array(
  'appId'  => FB_APP_ID,
  'secret' => FB_SECRET,
  'cookie' => true,
));

$fbCookieName = 'fbs_' . $facebook->getAppId();

$domain = $facebook->getBaseDomain();
if ($domain) {
  $domain = '.' . $domain;
}

setcookie($fbCookieName, '', time() - 3600, '/', $domain);
$facebook->setSession();

Код очищает cookie и одновременно истекает.Затем сеанс явно удаляется.

Rich

0 голосов
/ 05 мая 2011

привет, у меня такая же проблема, но я решил эту проблему купить с помощью этого FB.Event.subscribe ('auth.login', функция (ответ) {

window.location.reload (); }); FB.Event.subscribe ('auth.logout', function (response) { window.location.reload (); });

пожалуйста, добавьте этот скрипт, где вы должны написать свой логин. и наслаждайся

0 голосов
/ 05 марта 2011

Вероятно, проблема с кэшированием. Добавьте произвольно сгенерированное значение в строку запроса в перенаправлении, чтобы оно отображалось в браузере как «новая» страница, что-то вроде:

header('Location: index.php?cachebuster=' . microtime(true));

Это должно заставить браузер извлекать свежую копию, в которой больше не будет «зарегистрированного» контента.

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