Это хороший вопрос. Во-первых, пользователь вошел в ваше приложение, что означает, что у вас есть действительный токен доступа для пользователя .
И нет никакого способа убедиться, что токен доступа действителен перед вызовом API с этим токеном доступа. Поэтому, если вы хотите убедиться, что пользователь все еще входит в систему на каждой странице, вы должны сделать API-вызов Facebook для каждой из них. Вид тяжелый, но другого решения нет.
Что вы можете сделать, это предположить, что ваш токен доступа действителен, и проверять его только один раз (когда вам действительно нужно убедиться, что пользователь вошел в систему).
У вас может быть другой сценарий:
у вас есть нет данных Facebook о пользователе: пользователь не вошел в ваше приложение точно.
вы можете прочитать идентификатор пользователя , но у вас может не быть токена доступа для этого пользователя: пользователь не может войти в систему.
вы можете прочитать токен доступа , но он может быть недействительным (истек или отменен пользователем): пользователь не может войти в систему.
у вас есть действительный токен доступа : пользователь точно вошел в систему.
Вы можете прочитать идентификатор пользователя и токен доступа в сеансе. Массив сессий выглядит так:
[fb_148195765253871_access_token] => 14819576525...
[fb_148195765253871_user_id] => 1536397056
Число в ключах массива (здесь 148195765253871
) - это идентификатор вашего приложения.
Итак, что вы можете сделать на каждой странице, это проверить, установлены ли эти ключи, а если нет, загрузите SDK и перепроверьте (потому что доступ может быть сохранен в некоторых других местах, которые читает SDK):
if (isset($_SESSION['fb' . YOUR_APP_ID . 'access_token'])) {
// assume to user is logged in
// and keep going
} else {
require "facebook.php";
$facebook = new Facebook(array(
'appId' => YOUR_APP_ID,
'secret' => YOUR_APP_SECRET,
));
// Make an API call to be sure the user is logged in
// ie : that you have a valid access token
$user = $facebook->getUser(); // User ID
if ($user) {
try {
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
$user = null;
}
}
if ($user) {
// The user is logged in for sure
} else {
// The user is not logged in for sure
// Make him log in
echo '<a href="' . $facebook->getLoginUrl() . '">Login with Facebook</a>';
}
}
Надеюсь, это поможет!