2012-09-07 161 views
2

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

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;  
         }); 
      } 

腓控制器:

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

您正在销毁本地会话,但用户不会使用此代码从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注销。

+0

UAWDT,你可以在这里添加一些更多的细节来使这个更清楚吗?我想我可以猜出你的意思,但我不确定。此外,我做了一些小修改,但有些地方不清楚正在说什么。 – Paul

+0

您可以添加您的登录功能和处理登录/ facebook连接功能的控制器的__constructor吗? – BeRocket