Я создаю сайт 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