我正在使用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");
}
答案 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首次退出。