Тестирование, является ли сессия Facebook действительной? - PullRequest
1 голос
/ 03 октября 2009

Я не уверен, что библиотека Facebook на стороне php-сервера проверяет сессии при загрузке. Итак, я хочу знать, есть ли лучший способ убедиться, что у меня действительно есть действительный сеанс FB, а не какие-нибудь взломщики изменили данные $ _COOKIE.

$fb = new Facebook();

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

или лучше проверить идентификатор FB пользователя?

$fb = new Facebook();

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

EDIT: Хорошо, согласно facebook «Ваша клиентская библиотека должна выполнить все необходимые проверки для вас», используя секретный ключ приложения для md5 всех параметров и проверки хеша Так что если у вас есть сеанс - это действительный сгенерированный FB (хотя он все еще может быть просрочен).

Предположим, что вы входите в приложение для подключения. Затем вы выходите из FB. Если вы загружаете другую страницу в это приложение для подключения, то у FB JS не было никакой возможности изменить файлы cookie, чтобы указать, что вы действительно вышли из системы. А поскольку библиотека PHP на самом деле не вызывает FB для проверки вашего сеанса, она также не может знать, как удалить неправильные значения.

В результате у вас есть действительный набор файлов cookie, отправленных из FB, которые больше не годятся. Поэтому, если вы попытаетесь вызвать метод API, который требует сеанса, ваше приложение выдаст фатальную ошибку.

Ответы [ 2 ]

0 голосов
/ 11 июня 2013

Вызовите метод 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;
  }
}
0 голосов
/ 27 декабря 2010

Поздний ответ, но в настоящее время класс PHP в Facebook имеет метод getSession():

if ($facebook->getSession()) {
    // Do stuff
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...