Facebook API - 用户注销后会话仍然存在

flo*_*och 7 php session facebook-graph-api

我在我的iframe facebook应用程序中使用Facebook php-sdk来获取用户登录状态.在我使用Facebook帐户>注销链接注销后,会话尚未销毁.我必须在旧会话到期前等待几分钟,然后我的应用程序将再次获得正确的登录状态.

我希望Facebook能够在用户退出时自行杀死会话.如何手动终止会话?

这是我的代码:

$initParams = array(
  'appId'  => $conf['app_id'], 
  'secret' => $conf['secret_api_key'],
  'cookie' => TRUE,
);

$fb = new Facebook($initParams);
$fb->getSession();  // will return a session object eventhough user signed out!
Run Code Online (Sandbox Code Playgroud)

解决了:

$fb->api('/me')如果用户先前已注销,则调用将销毁会话.我已将代码更改为:

if ($session)
{
    try
    {
        $fbuid = $fb->getUser();
        $me = $fb->api('/me');
    }
    catch(FacebookApiException $e){}
}
Run Code Online (Sandbox Code Playgroud)

如果API调用不成功,$session将设置为NULL.非常奇怪的行为,我不解释这里发生的一切,但它解决了我的问题,即没有通过getSession()方法更新剩余的会话对象.

Hen*_*son 7

我正在使用$ fb-> getUser(),我所做的几乎与你的相同.

if ($fb->getUser())
{
    try
    {
        $me = $fb->api('/me');
    }
    catch(FacebookApiException $e){
        **$fb->destroySession();**
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现仅使用API​​来检查FB是否已注销有时是不一致的,但是使用destroySession(),会话肯定会被销毁.

  • 我试过了,但是失败了...如果用户从他/她的facebook(而不是应用程序)注销了$ fb-> getUser()仍然给了uid.即使新用户登录到facebook,$ fb-> getUser()仍会返回旧的uid. (2认同)

Osw*_*ald 0

Facebook 应取消会话与会话所属帐户的关联。您可以使用 Facebook::getUser() 检查是否已完成此操作:

if ($fb->getUser() === null) {
  // User logged out
} else {
  // User logged in
}
Run Code Online (Sandbox Code Playgroud)

  • getUser()方法代码基于getSession()。标准 facebook 注销后会话仍然存在 public function getUser() { $session = $this->getSession(); 返回$会话?$session['uid'] : 空; } (2认同)