3

抱歉标题混乱,情况是这样...

  1. 用户使用 Facebook 登录我的应用
  2. 用户退出 facebook....其他人来到计算机...
  3. 第二个用户尝试访问我的应用程序(不同的 Facebook 帐户,同一台计算机)
  4. 他们不能...相反,脚本会获取前一个用户的访问令牌。

我正在使用 facebook PHP SDK。

当用户第一次尝试登录时,我执行以下操作;

unset($_REQUEST);
unset($_COOKIE); //don't know if both are necessary
session_destroy();

然而不知何故,新的 fb 帐户仍然被识别为最后一个帐户(我得到了以前登录的用户访问令牌,当我尝试使用它时抛出异常,因为该用户不再登录)。

我需要使用注销功能吗?我假设将用户从 facebook 中注销,这不是我想要做的,只是在我的应用程序中从一个新用户开始。

有任何想法吗?由于我正在清除所有内容,因此我真的不知道这些数据的持久性。希望它是我想念的愚蠢的东西,但我想我会问,以防有人知道任何事情。

4

3 回答 3

1

这似乎最终奏效了:

$fb_key = 'fbsr_'.$facebookConfig['app_id'];
setcookie($fb_key, '', time()-3600);
$facebook->destroySession();
于 2012-04-04T10:46:27.210 回答
0

谢谢,但我不想让用户退出 facebook,只是退出我的应用程序。– Sabrina Gelbart 4 月 4 日 10:40

通过 $this->facebook->destroySession(); 与您的问题相矛盾 让用户退出 facebook 而不是 facebook,如果另一个用户想使用这台计算机,他们应该从他们的 facebook 帐户注销 = 新用户可以登录到您的网站。

您不希望用户的 facebook 在从您注销时从 facebook.com 注销,对吗?这会让我很沮丧

于 2012-12-11T10:25:05.817 回答
0

萨布丽娜

使用有效的用户访问令牌注销应该可以正常工作。这是我使用的“除非允许离线访问”


$user = $facebook->getUser();
$access_token = $_SESSION['fb_135669679827333_access_token'];
if ($user) {
  try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
}
if ($user) {
  $params = array (
  access_token => ''.$access_token.''
  );
  $logoutUrl = $facebook->getLogoutUrl($params);
} else {
$params = array(
  scope => 'read_stream,publish_stream,publish_actions,read_friendlists'
  //redirect_uri => $url
  );
  $loginUrl = $facebook->getLoginUrl($params);
};
于 2012-04-03T20:55:07.137 回答