清除会话和cookie注销从Facebook使用Facebook PHP SDK


Clear session and cookie on logout from Facebook using the Facebook PHP SDK

我使用的是Facebook Codeigniter PHP SDK。这就是我如何从facebook API获得登录用户:

public $loginuser = "";
function __construct(){
    parent::__construct();
    /* .......
       .......
    */
    $fb_config = array(
        'appId' => $this->config->item('appID'),
        'secret' => $this->config->item('appSecret'),
        'default_graph_version' => $this->config->item('graphVersion')
    );
    $fb = $this->load->library('facebook', $fb_config);
    $this->loginuser = $this->facebook->getUser();
}

并检查用户是否从Facebook登录:

function index($requestuser, $requestid){
    if ($this->loginuser) {
        /*do something here */
    }else{
        $myurl = site_url()."/Crowd/index/".$requestuser."/".$requestid;
        redirect($this->facebook->getLoginUrl(array(
            'scope' => 'email,user_likes,user_friends',
            'redirect_uri' => $myurl
        )));
    }
}

我遇到了两个问题:

  1. 当从Facebook(不是从应用程序)注销时,应用程序上的会话和cookie不会被销毁,因此即使用户已经从Facebook注销,也认为用户已登录。

  2. 当从应用程序注销时,会话也不会被销毁

以下是登出url:

$logout_url = $this->facebook->getLogoutUrl(array('next' => site_url() . '/user/logout'));

下面是User/logout控制器内部的操作:

public function logout(){
    $this->session->unset_userdata('id');
    $this->session->unset_userdata('email');
    $this->session->unset_userdata('firstname');
    $this->session->unset_userdata('lastname');
    $this->session->unset_userdata('status');
    $this->session->unset_userdata('isLoggedIn');
    $this->session->sess_destroy();
    session_destroy();
    // Redirect to baseurl
    redirect(base_url());
    //redirect('login/index');
}

如何查看已登录的用户?如何在注销时销毁Facebook登录会话?

检查用户是否仍在登录他/她的facebook帐户

if ($facebook->getUser())
{
    try
    {
        $user = $facebook->api('/me');
        //continue
    }
    catch(FacebookApiException $e){
        $facebook->destroySession();
        //destroy
    }
}