Php 测试Facebook会话是否有效?

Php 测试Facebook会话是否有效?,php,facebook,Php,Facebook,我不确定php服务器端Facebook库是否在加载时验证会话。所以,我想知道是否有一个最佳实践来确保我真的有一个有效的FB会话,而不是一些crackers修改了$\u COOKIE数据 $fb = new Facebook(); if( $fb->session_expires !== 0 && $fb->session_expires < time() ) { die('bad and/or old session'); } 编辑: 好的,“您的客户端库

我不确定php服务器端Facebook库是否在加载时验证会话。所以,我想知道是否有一个最佳实践来确保我真的有一个有效的FB会话,而不是一些crackers修改了$\u COOKIE数据

$fb = new Facebook();

if( $fb->session_expires !== 0 && $fb->session_expires < time() ) {
 die('bad and/or old session');
}
编辑: 好的,“您的客户端库应该为您执行所有必要的验证”,方法是使用应用程序机密md5所有参数并验证哈希。因此,如果你有一个会话-它是一个有效的FB生成的会话(尽管它仍然可以过期)

假设您登录到一个connect应用程序。然后你注销FB。如果您在该connect应用程序上加载了另一个页面,则FB JS没有任何机会将cookie更改为您实际已注销的状态。由于PHP库实际上并没有调用FB来验证会话,所以它也不知道如何删除错误值


结果是,您从FB发送了一组有效的cookie,这些cookie不再有效。因此,如果您尝试调用需要会话的API方法,那么您的应用程序将抛出一个致命错误。

答案很晚,但目前Facebook PHP类有一个
getSession()
方法:

if ($facebook->getSession()) {
    // Do stuff
}

调用API方法
$facebook->getUser()
,该方法应检查用户是否有效

如SDK中提供的示例所示

// Get User ID
$user = $facebook->getUser();

// We may or may not have this data based on whether the user is logged in.
//
// If we have a $user id here, it means we know the user is logged into
// Facebook, but we don't know if the access token is valid. An access
// token is invalid if the user logged out of Facebook.

if ($user) {
  try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
}

谁知道4年前是否有答案。不用测试就接受这一点,因为(显然)这是现在做事的方式。
// Get User ID
$user = $facebook->getUser();

// We may or may not have this data based on whether the user is logged in.
//
// If we have a $user id here, it means we know the user is logged into
// Facebook, but we don't know if the access token is valid. An access
// token is invalid if the user logged out of Facebook.

if ($user) {
  try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
}