测试Facebook会话是否有效?

时间:2009-10-02 20:49:23

标签: php facebook

我不确定php服务器端的Facebook库是否在加载时验证会话。那么我想知道是否有一个最佳实践来确保我确实有一个有效的FB会话而不是一些破解者改变$ _COOKIE数据。

$fb = new Facebook();

if( $fb->session_expires !== 0 && $fb->session_expires < time() ) {
 die('bad and/or old session');
}

或者测试用户FB id是否更好?

$fb = new Facebook();

if( $fb->user ) {
 die('no Facebook User Id given');
}

编辑: 好的,according to facebook“您的客户端库应该为您执行所有必要的验证”,通过使用应用程序机密来md5所有参数并验证散列。所以如果你有一个会话 - 它是一个有效的FB生成的会话(尽管它仍然可以过期)。

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

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

2 个答案:

答案 0 :(得分:0)

迟到的答案但是,目前Facebook PHP类有一个getSession()方法:

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

答案 1 :(得分:0)

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

https://github.com/facebook/facebook-php-sdk/blob/master/src/base_facebook.php#L508

与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;
  }
}