2013-05-07 144 views
0

我的问题是以下。 我有一个网站 http://de.gamercharts.com/Facebook登录错误使用FB php sdk

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

+0

这是一个众所周知的问题包括或调用session_start()。你可以粘贴你的Facebook注销脚本? – 2013-05-07 14:23:52

+0

我不处理Facebook登出我自己。我做这样的重定向到Facebook:https://www.facebook.com/logout.php?next = http%3A%2F%2Fde.gamercharts.com%2Flogout&access_token = 367142350026907%7C44c1128426159aa61f9432c17bf16082。你可以传递一个url到这个函数,url是我们自己的注销函数,这会删除GC会话。 – 2013-05-08 12:51:51

+0

我不明白的是为什么当我退出facebook时我仍然看到我的FB用户标识。我只是想让我的问题更明显。 – 2013-05-08 12:55:14

回答

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"); 

P.S不要忘记在脚本

+0

Thanx John.Your答案指出我的方向正确,但问题是我的facebook对象没有destroySession()方法。我在发布这个答案之前检查了这个答案,因为我怀疑它与Facebook的会话有关。这些是我的脸书对象可用的所有方法。 – 2013-05-10 13:08:51

+0

阵列 ( [0] => __construct [1] => setAppId [2] => getAppId [3] => setApiSecret [4] => getApiSecret [5] => setFileUploadSupport [6] => useFileUploadSupport [7] => setAccessToken [8] => getAccessToken [9] => getSignedRequest [10] =>的getUser [11] => getLoginUrl [12] => getLogoutUrl [13] = > getLoginStatusUrl [14] => api ) – 2013-05-10 13:09:09

+0

我读了关于这个方法,其他部分的destroySession,b ut似乎无法找到它。从我在文档中看到的内容看来,你只需要让用户点击Facebook注销网址,就是这样。这就是它所说的,也许你对它的理解是不同的。“ SDK可用于支持使用用户的Facebook帐户验证您的网站。在服务器端,SDK提供了helper方法来进行身份验证,请求权限和注销。这个功能是由Facebook :: getUser(),Facebook :: getLoginUrl()和Facebook :: getLogoutUrl()方法提供的。“ – 2013-05-10 13:45:25

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

得到正确的用户名和其他信息

每次您需要请求我的页面。如果此页面发生错误,请删除Facebook用户的数据。用户的ID以及存储在cookie中的其他Facebook数据;当您在Facebook网站上注销时,您的网站Cookie仍然保留;您的php代码将会读取这个cookies:

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

并返回用户ID。 有了这个代码:

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

您检查,如果这是饼干实际工作,如果不是的话,你改变它:

1$user = null; 

所有的饼干

+0

嗯,我不明白这是如何回答我的问题。我的问题是,Facebook的API如何获得一个用户ID(我的用户ID,我chcecked)如果我从Facebook注销)。 – 2013-05-08 12:02:25