2

我正在使用 Facebook Connect SDK for php 使用 CodeIgniter 开发基于 PHP 的应用程序。到目前为止,所有用户都可以登录系统,但对于某些用户尝试注销时会话不会过期!这真的很奇怪,因为这对某些用户有效,而对其他用户无效!以下是我使用 Facebook 提供的基本注销代码:控制器:

if ($user) {
            $data['logoutUrl'] = $this->facebook->getLogoutUrl();

看法:

<a href="<?php echo $logoutUrl; ?>" id="bstyle" onclick="RemoveSess()">Logout</a>

JavaScript:

function RemoveSess(){
                $.post("<?php echo base_url(); ?>"+ "/facebook_cn/remSess", function(data){
                        document.getElementById('message').innerHTML = $data;       
                      });   
            }

php控制器:

function remSess()
{
    $data2 = array('user_id' => '','logged_in' => '');
    $this->session->unset_userdata($data2);
    $this->session->sess_destroy();
    session_destroy();
    $data = array('sess' => "gone" );
    echo json_encode($data["sess"]="gone");
}
4

1 回答 1

1

您正在破坏本地会话,但用户不会使用此代码从 Facebook 注销。因此,一旦您初始化 SDK,您的应用程序就会缓存用户的 Facebook 会话。您需要从 Facebook 和您的网站注销用户,或者检查更好的登录/Facebook 连接功能以不自动登录用户。

如果您需要更多说明,请提供您在其中启动 Facebook SDK 的登录功能和代码。

更新

这就是我的 FB 连接:

$this->_facebook = new Facebookapi($settings);

// Try to get the user's id on Facebook
$userId = $this->_facebook->getUser();

// If user is not yet authenticated, the id will be zero
if( $userId == 0 ){
    $this->_loginUrl = $this->_facebook->getLoginUrl(array('scope'=>'email')); 
}else{
    $_user = $this->_facebook->api('/me');
    $this->_user = new Users();
    $this->_user->load($_user['username'], 'facebook');
}

因此,如果用户已登录 facebook,我会检查我是否已经拥有具有此类用户名的用户,如果是,我会将用户加载到对象中。用户将自动登录回我的站点,无需再次单击连接按钮。

您需要检查您的代码以确保您没有像我这样的东西,否则您的用户将永远不会注销,直到先从 Facebook 注销。

于 2012-10-09T20:57:10.910 回答