如何检查用户是否使用新的facebook php api登录

如何检查用户是否使用新的facebook php api登录,php,facebook,facebook-graph-api,facebook-login,Php,Facebook,Facebook Graph Api,Facebook Login,我正在使用 我有两个页面:公共页面(不需要用户登录)和私人页面(需要用户登录) 因此,我的应用程序中每个php页面的代码如下所示: if (this_page_requires_user_login){ $facebook = new Facebook(...) ; $session = $facebook->getSession ; if (!$session){ $url =$facebook.getLoginUrl(ar

我正在使用

我有两个页面:公共页面(不需要用户登录)和私人页面(需要用户登录)

因此,我的应用程序中每个php页面的代码如下所示:

if (this_page_requires_user_login){
      $facebook = new Facebook(...) ;
      $session = $facebook->getSession ;
      if (!$session){
              $url =$facebook.getLoginUrl(array(next => current_page );
              echo "<fb:redirect url=$url/>" ;

}
// the rest of the code continues here
if(此页面需要用户登录){
$facebook=新facebook(…);
$session=$facebook->getSession;
如果(!$session){
$url=$facebook.getLoginUrl(数组(下一个=>当前页面);
回声“;
}
//代码的其余部分在这里继续
现在,正如您所看到的,这种工作方式将每个页面转发到登录url,虽然工作正常,但速度也很慢,并将&session={bla}字符串附加到单个url

在我将用户重定向到loginpage之前,我需要一种方法来检查用户已登录的位置。但是我在php api中找不到这种方法。最好的方法是什么

编辑

这似乎奏效了

if ($session) {
  try {
    $me = $facebook->api('/me');
    if ($me) {
       // here comes your code for user who is logged in
    }
  } catch (FacebookApiException $e) {
    login()
  }
}else{
 login()
}

function login(){

  $url =$facebook.getLoginUrl(array(next => current_page );


      echo "<fb:redirect url=$url/>" ;
}
if($session){
试一试{
$me=$facebook->api('/me');
如果($我){
//下面是您登录用户的代码
}
}捕获(FacebookApiException$e){
登录()
}
}否则{
登录()
}
函数登录(){
$url=$facebook.getLoginUrl(数组(下一个=>当前页面);
回声“;
}

如果我正确阅读了您的代码,只有在没有返回会话的情况下,您才会执行重定向?根据中的评论,即使您恢复了会话,您也不能认为它仍然有效。只有尝试需要登录用户的API调用,您才能确定。这是我见过的可靠确定登录/注销状态的最佳方法。

if ($session) {
  try {
    $me = $facebook->api('/me');
    if ($me) {
      //User is logged in
    }
  } catch (FacebookApiException $e) {
    //User is not logged in
  }
}

如果您已经存储了访问令牌并正在使用它,那么这就不起作用,因为API调用仍然可以正常工作而不会引发异常,但是当您将它们重定向到getLogoutUrl(例如)时,它只会将它们发送到Facebook的主页,而不会将您发送回您的主页website@andrewtweber没错。谢谢。你必须在e、 这就是为什么您不重定向: