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
Php 获取用户facebook登录状态,但不要';我不想要重定向_Php_Facebook_Api_Curl_Https - Fatal编程技术网

Php 获取用户facebook登录状态,但不要';我不想要重定向

Php 获取用户facebook登录状态,但不要';我不想要重定向,php,facebook,api,curl,https,Php,Facebook,Api,Curl,Https,我正在建立一个使用php facebook库的网站。在每个页面的开头,我都会使用$facebook->getLoginStatusUrl($params)函数检查用户是否登录到facebook(或尝试登录)。我的问题是,检查该函数的唯一真正方法是让用户根据他们的状态重定向到页面(通过将他们定向到该函数返回的url)。我不能使用file\u get\u contents或cURL,因为该函数返回的URL使用https。我是否可以通过服务器端方法获取该URL的内容?或者说重定向是实现这一点的唯一方法

我正在建立一个使用php facebook库的网站。在每个页面的开头,我都会使用$facebook->getLoginStatusUrl($params)函数检查用户是否登录到facebook(或尝试登录)。我的问题是,检查该函数的唯一真正方法是让用户根据他们的状态重定向到页面(通过将他们定向到该函数返回的url)。我不能使用file\u get\u contents或cURL,因为该函数返回的URL使用https。我是否可以通过服务器端方法获取该URL的内容?或者说重定向是实现这一点的唯一方法?我更希望不要将此作为客户端操作(通过Javascript)。有什么想法吗?

您可以使用facebook getUser()函数检查用户是否已登录,是否已授予您的网站权限。之后,可以使用getLoginUrl()或getLogoutUrl()向用户显示右按钮:

$user = $facebook->getUser();    

if (!$user)
{
  $loginUrl = $facebook->getLoginUrl(array(
    'redirect_uri' => REDIRECT_URL,
    'scope' => APP_PERMS,
    'display' => 'page'
  ));

  //do something with $loginUrl, for example:
  echo '<a href="'.$loginUrl.'">Login with facebook</a>';
}
else
{
  //check that this user is still valid
  $realUser = $facebook->api('me');

...
$user=$facebook->getUser();
如果(!$user)
{
$loginUrl=$facebook->getLoginUrl(数组)(
'重定向\u uri'=>重定向\u URL,
“范围”=>APP\u PERMS,
'显示'=>'页面'
));
//使用$loginUrl执行某些操作,例如:
回声';
}
其他的
{
//检查此用户是否仍然有效
$realUser=$facebook->api('me');
...
您可以在facebook文档中了解有关此功能的更多信息:

我是否可以通过服务器端方法获取该URL的内容

这对你没有帮助,因为客户登录Facebook时使用的不是你的服务器,而是他的浏览器

因此,检查用户是否登录必须在他们的浏览器中进行——这就是浏览器被重定向到Facebook的原因,因为这是读取Facebook域下设置的Cookie的唯一方法

我更希望不要将此作为客户端操作(通过Javascript)

由于重定向,它已经是一种客户端操作


绝对没有办法让您的服务器单独判断用户是否在其浏览器中登录到Facebook。

我已经尝试过,如果它对我有效,我会使用它。出于某种原因,即使我从Facebook注销,$Facebook->getUser()仍然会返回我的facebook ID,这使得测试我是否登录变得毫无意义。这是真的,因为facebook库首先检查Cookie,如果有延迟,直到Cookie变老。这要慢得多,但你可以检查用户是否连接到需要访问令牌的api调用:你可以调用$facebook->api(“/me”)例如,除此之外,这还为您提供了有关用户的更多信息。我已更新了我的帖子,您可以在getUser返回id后检查真实用户,这样页面将更快地响应未登录的用户。我为我的情况想出了一些其他方法,但我认为您所说的有一定的正确性,让我们继续这个