0

我的问题如下。我有一个网站 http://de.gamercharts.com/

您可以连接 facebook(如果您没有帐户,将创建一个帐户)。在此之后,如果您从网站注销,您也会从 Facebook 注销。到目前为止一切都很好。问题是,如果我退出该站点(让我们称之为站点 GC)并退出 facebook,当我在站点上单击“与 facebook 连接”时,我会登录该站点,而不是被提示脸书登录屏幕。当我打印用户时,我看到即使我退出了 Facebook,我仍然拥有用户 ID。为什么会发生这种情况,我该如何解决?非常感谢任何花时间回答的人。作为记录,我正在使用 Zend ,尽管我认为这无关紧要。我自己没有实现 facebook 登录,我正在继续其他人的工作。

4

2 回答 2

1

该问题是由于Facebook Session Variables您的域/站点中存在的,即使在从 facebook 和您的站点注销后也是如此。当有人从您的站点注销时,应注意销毁所有会话 [甚至是 facebook 会话]。要销毁您的域/站点中的 facebook 会话,您可以destroySession();在注销脚本中使用 [在 facebook php sdk 中提供的] 功能。

 $config = array();
 $config['appId'] = 'YOUR_APP_ID';
 $config['secret'] = 'YOUR_APP_SECRET';
 $facebook = new Facebook($config);
 $logout = $this->facebook->getLogoutUrl(array('next'=>'url to be redirected after logout'));
 $facebook->destroySession(); // To destroy facebook Sessions
 $session_destroy(); //To destroy sessions of your site
 header("Location:$logout");

PS 不要忘记在脚本中包含或调用 session_start()

于 2013-05-08T14:55:51.763 回答
0

如果你使用 facebook sdk,那么你需要使用异常 try-catch 来检查用户是否仍然登录:

 1$facebook = new Facebook(array(
 2  'appId'  => you id,
 3  'secret' => you secret,
 4));
 5
 6// See if there is a user from a cookie
 7$user = $facebook->getUser();
 8
 9if ($user) {
10  try {
11    // Proceed knowing you have a logged in user who's authenticated.
12    $user_profile = $facebook->api('/me');
13  } catch (FacebookApiException $e) {
14    error_log($e);
15    $user = null;
16  }
17}

之后,您可以从 Facebook 获取正确的用户 ID 和其他信息


每次您需要请求我的页面。如果此页面抛出错误,则删除 facebook 用户的数据。存储在 cookie 中的用户 ID 和其他 Facebook 数据;当您退出 Facebook 网站时,您网站的 cookie 将继续保存;您的 php 代码将读取此 cookie:

1$user = $facebook->getUser();

并返回用户 ID。使用此代码:

1$user_profile = $facebook->api('/me');

您检查此 cookie 是否实际,如果不是,则更改它:

1$user = null;

Cookie 中的所有内容

于 2013-05-08T07:35:20.143 回答