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 に答える