使用Facebook->getUser()和FB.getUserID()登录Facebook

使用Facebook->getUser()和FB.getUserID()登录Facebook,facebook,facebook-javascript-sdk,facebook-php-sdk,Facebook,Facebook Javascript Sdk,Facebook Php Sdk,对于我的网站,我使用Facebook登录。使用$facebook->getUser函数,我可以将用户从登录页面重定向到登录时看到的第一个页面 $facebook->getUser的结果为0或用户id。该值似乎存储在域Cookie中,而不是会话Cookie中,因此在浏览器完全关闭并重新打开时不会删除该值。这是完全使用,因为我的页面不必连接Facebook就能知道用户的id 然而,用户可以删除其所有cookie,从而让$facebook->getUser函数返回0 event,尽管用户已经接受了可以

对于我的网站,我使用Facebook登录。使用$facebook->getUser函数,我可以将用户从登录页面重定向到登录时看到的第一个页面

$facebook->getUser的结果为0或用户id。该值似乎存储在域Cookie中,而不是会话Cookie中,因此在浏览器完全关闭并重新打开时不会删除该值。这是完全使用,因为我的页面不必连接Facebook就能知道用户的id

然而,用户可以删除其所有cookie,从而让$facebook->getUser函数返回0 event,尽管用户已经接受了可以在中找到的应用程序

我还尝试使用以下方法:

$accessToken = $this->facebook->getAccessToken();
$facebook->api('/me?access_token=' . $accessToken, 'GET');
然而,这一直给我一个错误,必须使用活动访问令牌来查询有关当前用户的信息。$this->facebook->getAccessToken从应用程序返回用户的AccessToken,因此这无助于:

现在我的页面不知道用户已经与facebook连接,所以它会打开登录页面。这里//connect.facebook.net/en_US/all.js已加载,我可以发出FB.getUserID请求

现在问题和奇怪的部分:

完成window.fbAsyncint函数并异步加载SDK时

 (function(d){
 var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
 js = d.createElement('script'); js.id = id; js.async = true;
 js.src = '//connect.facebook.net/en_US/all.js';
 d.getElementsByTagName('head')[0].appendChild(js); }(document));
我运行FB.getUserID。这不会返回任何结果。但大约100-700毫秒后,如果我再次请求,它会返回fb id。所以Javascript在没有使用我的域cookie的情况下从facebook获得了我的FBID

当我使用Chrome和open Network的Inspector时,我可以看到,在所有内容都应该加载并完成之后,正在请求并加载xd_arbiter.php?version=19 static.ak.facebook.com/connect页面。 oauth?客户端\u id=***&response\u type=***www.facebook.com/dialog的计数相同

看起来这个javascript请求可以从Facebook获得FBID

我希望能够用PHP实现这一点,这样用户就不必在1或2秒钟内看到登录页面


我希望我解释得足够好,如果没有,请要求清楚。我非常想解决这个问题=

由于您无法访问其他域的Cookie,因此无法在服务器端执行此操作。您的确切意思是什么?那么javascript可以从另一个域访问Cookie?它可以在浏览器中发出跨域请求。因此,PHP无法要求Facebook提供已经接受该应用程序的用户的fb id??:只有通过自动重定向到Facebook登录对话框。