Facebook Connect注销

时间:2012-09-07 20:50:26

标签: php facebook codeigniter session

我正在使用Facebook Connect SDK for php开发基于Php的应用程序CodeIgniter。到目前为止,所有用户都能够登录系统,但对于某些用户,当他们尝试注销时,会话将不会过期!这真的很奇怪,因为这对一些用户有用而不适合其他用户! 以下是我使用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");
}

1 个答案:

答案 0 :(得分:1)

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

如果您需要更多解释,请在初始化Facebook SDK时提供登录功能和代码。

<强>更新

这就是我对FB connect的所作所为:

$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首次退出。