Проблема очистки сессии с PHP - PullRequest
0 голосов
/ 25 сентября 2011

Я использую приложение Facebook Connect .Представьте, что это своего рода приложение, где пользователи заходят на мой сайт, нажимают кнопку подключения, входят в Facebook, возвращаются на мой сайт и ждут подключения другого пользователя.

Я использую offline_accessпараметр при подключении.Как только пользователь вернется на мой сайт, мне нужно очистить все сеансовые куки.Если сеанс не был успешно удален, и следующий пользователь приходит и подключается, пользователь не получит страницу входа, вместо этого он сразу же перенаправит на мой URL-адрес ответа после принятия моего последнего состояния сеанса.

Я пыталсяэти методы вместе, чтобы очистить сеанс:

    if (ini_get("session.use_cookies")) {
        $params = session_get_cookie_params();
        setcookie(session_name(), '', time() - 42000,
                  $params["path"], $params["domain"],
                  $params["secure"], $params["httponly"]);
    }
    if (isset($_SERVER['HTTP_COOKIE'])) {
        $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
        foreach($cookies as $cookie) {
            $parts = explode('=', $cookie);
            $name = trim($parts[0]);
            setcookie($name, '', time()-42000);
            setcookie($name, '', time()-42000, '/');
        }
    }

С помощью вышеуказанных методов что-то работает, но очищаются не все сеансы, особенно куки-файлы, специфичные для домена Facebook.Итак, чтобы удалить куки Facebook, я попробовал следующие статические методы, чтобы проверить, как они работают.Но даже это не помогает.

    setcookie('L', '', time()-42000,"/",".facebook.com");
    setcookie('act', '', time()-42000,"/",".facebook.com");
    setcookie('c_user', '', time()-42000,"/",".facebook.com");
    setcookie('datr', '', time()-42000,"/",".facebook.com");
    setcookie('locale', '', time()-42000,"/",".facebook.com");
    setcookie('lu', '', time()-42000,"/",".facebook.com");
    setcookie('pk', '', time()-42000,"/",".facebook.com");
    setcookie('p', '', time()-42000,"/",".facebook.com");
    setcookie('presence', '', time()-42000,"/",".facebook.com");
    setcookie('s', '', time()-42000,"/",".facebook.com");
    setcookie('sct', '', time()-42000,"/",".facebook.com");
    setcookie('x-src', '', time()-42000,"/",".facebook.com");
    setcookie('xs', '', time()-42000,"/",".facebook.com");

И, наконец, я попробовал обычные методы,

    unset($_SESSION['fb_243155855719532_access_token']);
    unset($_SESSION['fb_243155855719532_code']);
    unset($_SESSION['fb_243155855719532_user_id']);
    unset($_SESSION['fb_243155855719532_state']);

    // Finally, destroy the session.
    session_unset();
    session_destroy();exit;

Уничтожение сеансов работает, но сеансы Facebook не очищаются.Если я попытаюсь очистить сеансовые куки-файлы с помощью надстройки Firefox Web Dev, она будет работать очень умно.

Ответы [ 2 ]

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

Если у пользователя есть 'offline_access', то в настоящее время НЕВОЗМОЖНО очистить сеанс.

Вызов метода PHP SDK getLoginUrl () выглядит так, как будто он должен работать, он выводит пользователя из Facebook, но при возвратена вашем собственном сайте, сеанс все еще действителен.

Это не то, как это должно работать при ошибке, было введено только с последней версией PHP SDK v3.

Я зарегистрировал ошибку,пожалуйста, проголосуйте / добавьте ваше репро, чтобы помочь исправить это:

http://developers.facebook.com/bugs/250825644953332

0 голосов
/ 25 сентября 2011

Из-за междоменных ограничений вы не можете редактировать файлы cookie с другого домена (например, файлы cookie Facebook). Вы можете вызвать функцию javascript sdk FB.logout () для правильного выхода из системы. В PHP SDK есть метод getLogoutUrl, который вы можете вызвать:

$facebook->getLogoutUrl( array(
    'next'  => 'http://example.com/logout.php')
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...