Сессия все еще существует после выхода из Facebook в моем приложении - PullRequest
0 голосов
/ 28 сентября 2011

привет, я использую facebook graph api для приглашения друзей в моем приложении codeigniter.если я уже вошел в Facebook, отображается следующий экран

enter image description here

, если я не вошел в систему, страница перенаправляет на страницу входа в Facebook, после успешного входа перенаправляется обратно на страницу выше.,все работает отлично.но проблема в

1) i log in to facebook .  
2) i run my application and get the list of friends to invite (above view) . 
3)then i log out from facebook . 
4)then refresh (F5) my friends invite page .

исключение происходит,

часть исключения

Error:FacebookApiException Object
(
    [result:protected] => Array
        (
            [error] => Array
                (
                    [message] => Error validating access token: The session is invalid because the user logged out.
                    [type] => OAuthException
                )

        )

    [message:protected] => Error validating access token: The session is invalid because the user logged out.
    [string:Exception:private] => 
    [code:protected] => 0
    [file:protected] => C:\xampp\htdocs\elephanti\application\frontend\libraries\connections\facebook.php
    [line:protected] => 530
    [trace:Exception:private] => Array

мой код

public function invite_friends()
{

    $fbconfig = array(
        'appId' => $this->co_config_items['fb_appid'],
        'secret' => $this->co_config_items['fb_secret'],
        'cookie' => true,
        'domain' => $this->ci->config->item('domain')
    );

    $this->ci->load->library('connections/facebook', $fbconfig);

    $facebook = new Facebook($fbconfig);

    $session = $facebook->getSession();    

    if (!isset($session)) {

        $url = $facebook->getLoginUrl(array(
                    'canvas' => 1,
                    'fbconnect' => 0
                ));

        echo "<script type='text/javascript'>top.location.href = '$url';</script>";

    } else {

        try {

            $uid = $facebook->getUser();  
            $me = $facebook->api('/me');

            $updated = date("l, F j, Y", strtotime($me['updated_time']));

        } catch (FacebookApiException $e) {

            echo "Error:" . print_r($e, true);
        }
    }
    $data=array('fb_appid'=>$this->co_config_items['fb_appid']);

    return $data;
}

исключение выводится из

} catch (FacebookApiException $e) {

    echo "Error:" . print_r($e, true);
}

block

Дело в том, что если условие else, часть else работает, но сеанса не должно быть, когда я вышел из Facebook.но сессия не очищена, я var_dump сессий в первый и второй раз.

до выхода из системы

array(7) {
  ["session_key"]=>
  string(46) "2.AQC0otQQWydT6w0l.3600.1317193200.0-770398599"
  ["uid"]=>
  string(9) "770398599"
  ["expires"]=>
  int(1317193200)
  ["secret"]=>
  string(24) "E9oNYQCuQdggyp_pJyLnqA__"
  ["base_domain"]=>
  string(9) "localhost"
  ["access_token"]=>
  string(90) "140577549320080|2.AQC0otQQWydT6w0l.3600.1317193200.0-770398599|5ZoDt4wTt16ve0fgaj8m_X70ojw"
  ["sig"]=>
  string(32) "74a283a7cd2f4d62bb7739deaf65affc"
}

после выхода из системы и обновления один раз

array(7) {
  ["access_token"]=>
  string(90) "140577549320080|2.AQC0otQQWydT6w0l.3600.1317193200.1-770398599|C84xhtx_dnakmf-7oCZlb07FQL8"
  ["base_domain"]=>
  string(9) "localhost"
  ["expires"]=>
  string(10) "1317193200"
  ["secret"]=>
  string(24) "E9oNYQCuQdggyp_pJyLnqA__"
  ["session_key"]=>
  string(46) "2.AQC0otQQWydT6w0l.3600.1317193200.1-770398599"
  ["sig"]=>
  string(32) "6eedc49e4957708a551c4155ff8f57a6"
  ["uid"]=>
  string(9) "770398599"
}

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

ОБНОВЛЕНИЕ

после session это NULL я печатаю session и добавляю die и снова зашли на Facebook;

$ session = $ facebook-> getSession ();
print_r ($ session);die;

вещь теперь каждый раз дает NULL, так что я думаю, что место после

 $session = $facebook->getSession();    

сессии создается, я думаю, именно поэтому я получаю правильный результат в second время, откуда меняется сессия ??

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

1 Ответ

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

Попробуйте добавить прослушиватель, когда пользователь выходит из системы;

FB.subscribe('auth.logout', function(response){
    // Do something to let your program know that the user is now logged out.
});

И / или добавьте свой собственный выход из Facebook на свой сайт с помощью FB.logout (). Это должно очистить сессию вашего сайта / s fb, а также выйти из нее на facebook.com.

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