Facebook PHP SDK缓存用户

Spl*_*lin 2 php facebook facebook-php-sdk

我目前正在实施一个使用FB Connect的站点以及我们自己的系统来处理登录.它当前设置的方式,以前访问过我们网站并批准我们权限的用户在再次访问该网站时会自动登录.此外,如果用户在使用FB登录其帐户时点击退出按钮,则会将其记录在FB之外.

现在,如果用户已登录并点击已注销的按钮,则会将其从FB中记录下来.该站点自动创建一个新会话,并调用检查以查看用户是否仍使用PHP SDK getUser()函数登录到FB.似乎即使用户注销了SDK,也会缓存用户ID并说他们已经从SDK登录了.您可以在下面看到对缓存的调用.无论如何都要覆盖这个没有修改FB SDK或我是否接近问题?

if ($this->user !== null) {
  // we've already determined this and cached the value.
  return $this->user;
}

return $this->user = $this->getUserFromAvailableData();
Run Code Online (Sandbox Code Playgroud)

Sea*_*udt 5

它可能与您的应用程序流程有关.FB PHP SDK也让我很难过.

这可能会有所帮助:

通过将用户重定向到logoutUrl来记录用户,然后将其重定向回您的站点.此时你需要调用$ facebook-> destroySession();

看看代码的作用(如base_facebook.php第1092行所示):

/**
 * Destroy the current session
 */
 public function destroySession() {
     $this->setAccessToken(null);
     $this->user = 0;
     $this->clearAllPersistentData();
 }
Run Code Online (Sandbox Code Playgroud)

在此之后,正常清除会话,用户应完全注销而不是缓存.

在我的代码中,当我生成loginUrl和logoutUrl时,我执行以下操作:

$fb_data = array(
     'loginUrl'  => $facebook->getLoginUrl(array('scope' => 'email,user_birthday')),
     'logoutUrl' => $facebook->getLogoutUrl(array('next' => base_url('index.php/authenticate/kill_session'))),
);
Run Code Online (Sandbox Code Playgroud)

它在authenticate/kill_session方法中,我称之为$ facebook-> destroySession();


小智 5

问题:如果用户通过Facebook注销而不是使用您提供的调用会话杀手的链接,该怎么办?

即使用户不在,您仍会缓存会话.