Facebook PHP SDK缓存用户


Facebook PHP SDK Caching User

我目前正在实施一个网站,使用FB连接以及我们自己的系统来处理登录。它目前的设置方式是,以前访问过我们网站并批准了我们的权限的用户在再次访问网站时自动登录。此外,如果用户在使用FB登录帐户时点击登出按钮,它将注销他们的FB。

现在,如果一个用户登录并点击注销按钮,它将注销他们的FB。站点会自动创建一个新的会话,并调用一个检查来查看用户是否仍然使用PHP SDK getUser()函数登录到FB。似乎即使用户注销了,SDK也会缓存用户ID,并说他们已经登录了……从SDK。您可以在下面看到对缓存的调用。是否有办法重写这个w/o修改FB SDK或我接近的问题是错误的?

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

这可能与您的应用程序流有关。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();
 }

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

在我的代码中,当我生成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'))),
);

authenticate/kill_session方法中,我调用$facebook->destroySession();

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

当用户离开时,会话仍然会被缓存。

你可以使用JS和PHP的组合来解决用户从FACEBOOK网站注销的问题。

在你的页面加载,加载一个JS getloginstatus(),并且任何时候一个不匹配另一个(即。=你的网站登录状态),强制刷新(通过JS)你的页面处理不匹配。

它可能看起来有问题(页面自动刷新),但对我来说没关系。