使用fb php sdk的facebook登录错误
我的问题如下。 我有一个网站 您可以连接facebook(如果您没有帐户,将创建一个帐户)。 在此之后,如果您从该网站注销,您也将从facebook注销。 到目前为止一切都还好。 问题是,如果我注销了该站点(我们称之为站点GC)并注销了facebook,当我在该站点上单击“与facebook连接”时,我将登录该站点,而不是被提示进入facebook登录屏幕。 当我打印用户时,我看到即使我从facebook注销,我仍然有用户id。 为什么会发生这种情况,我如何修复它? Thanx对任何花时间回答问题的人来说都很重要。 作为记录,我正在使用Zend,尽管我认为它与此无关。使用fb php sdk的facebook登录错误,php,facebook,zend-framework,Php,Facebook,Zend Framework,我的问题如下。 我有一个网站 您可以连接facebook(如果您没有帐户,将创建一个帐户)。 在此之后,如果您从该网站注销,您也将从facebook注销。 到目前为止一切都还好。 问题是,如果我注销了该站点(我们称之为站点GC)并注销了facebook,当我在该站点上单击“与facebook连接”时,我将登录该站点,而不是被提示进入facebook登录屏幕。 当我打印用户时,我看到即使我从facebook注销,我仍然有用户id。 为什么会发生这种情况,我如何修复它? Thanx对任何花时间回答
我自己没有实现facebook登录,我正在继续其他人的工作。如果使用facebook sdk,则需要使用exception 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用户的数据。用户id和存储在cookies中的其他facebook数据;当您登录Facebook站点时,您站点的cookies将继续保留;您的php代码将读取以下cookie:
1$user = $facebook->getUser();
并返回用户id。
使用此代码:
1$user_profile = $facebook->api('/me');
您检查此cookies是否真实,如果不是,则更改它:
1$user = null;
Cookie中的所有问题该问题是由于您的域/站点中存在
Facebook会话变量
,即使在从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");
请不要忘记在脚本中包含或调用session_start()这是一个众所周知的问题。你能粘贴你的facebook注销脚本吗?我自己不处理facebook注销。我重定向到facebook,如下所示:。你可以向这个函数传递一个url,url是我们自己的注销函数,它删除GC会话。我不明白的是,为什么我在注销facebook时仍然看到我的FB用户id。我只是想让我的问题更明显。你在使用facebook php sdk吗?我不知道这是如何回答我的问题的。我的问题是,如果我从facebook注销,facebook api如何获取用户id(我的用户id,我的chcecked)。Thanx John。你的回答为我指明了正确的方向,但问题是我的facebook对象没有destroySession()方法。我在发布此答案之前检查了此项,因为我怀疑它与facebook的会话有关。这些是我的facebook对象可用的所有方法。数组([0]=>\u构造[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)我读到了这个方法,在其他部分破坏了会话,但似乎找不到。从我在文档中看到的内容来看,你似乎只需要让用户点击facebook注销url,就这样。这就是它所说的,也许你的理解有所不同。“SDK可用于支持使用用户的Facebook帐户对您的站点进行身份验证。在服务器端,SDK为身份验证、请求权限和注销提供帮助方法。此功能由Facebook::getUser()、Facebook::getLoginUrl()和Facebook::getLogoutUrl()方法提供。“我已尝试从代码中删除所有COOKIE。如果(isset($_服务器['HTTP_COOKIE']){$COOKIE=explode(';',$_服务器['HTTP_COOKIE']);foreach($cookies as$COOKIE){$parts=explode('=',$COOKIE),我尝试了此功能;$name=trim($parts[0]);setcookie($name',time()-1000);setcookie($name',time()-1000',/);}它不起作用。但我注意到,如果我使用Chrome的删除所有cookie选项,它会按预期工作。