Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用fb php sdk的facebook登录错误_Php_Facebook_Zend Framework - Fatal编程技术网

使用fb php sdk的facebook登录错误

使用fb php sdk的facebook登录错误,php,facebook,zend-framework,Php,Facebook,Zend Framework,我的问题如下。 我有一个网站 您可以连接facebook(如果您没有帐户,将创建一个帐户)。 在此之后,如果您从该网站注销,您也将从facebook注销。 到目前为止一切都还好。 问题是,如果我注销了该站点(我们称之为站点GC)并注销了facebook,当我在该站点上单击“与facebook连接”时,我将登录该站点,而不是被提示进入facebook登录屏幕。 当我打印用户时,我看到即使我从facebook注销,我仍然有用户id。 为什么会发生这种情况,我如何修复它? Thanx对任何花时间回答

我的问题如下。 我有一个网站

您可以连接facebook(如果您没有帐户,将创建一个帐户)。 在此之后,如果您从该网站注销,您也将从facebook注销。 到目前为止一切都还好。 问题是,如果我注销了该站点(我们称之为站点GC)并注销了facebook,当我在该站点上单击“与facebook连接”时,我将登录该站点,而不是被提示进入facebook登录屏幕。 当我打印用户时,我看到即使我从facebook注销,我仍然有用户id。 为什么会发生这种情况,我如何修复它? Thanx对任何花时间回答问题的人来说都很重要。 作为记录,我正在使用Zend,尽管我认为它与此无关。
我自己没有实现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选项,它会按预期工作。