これは良い質問です。まず、ユーザーがアプリにログインしているということは、ユーザーの有効なアクセストークンがあることを意味します。
また、このアクセストークンを使用してAPI呼び出しを行う前に、アクセストークンが有効であることを確認する方法はありません。したがって、ユーザーが引き続き各ページにログインしていることを確認する場合は、各ページでFacebookへのAPI呼び出しを行う必要があります。ちょっと重いですが、他に解決策はありません。
実行できることは、所有しているアクセストークンが有効であると想定し、たまにのみチェックすることです(ユーザーがログインしていることを本当に確認する必要がある場合)。
あなたは異なるシナリオを持つことができます:
ユーザーに関するFacebookデータがありません。ユーザーがアプリに確実にログインしていません。
ユーザーIDを読み取ることはできますが、このユーザーのアクセストークンがない可能性があります。ユーザーがログインしていない可能性があります。
アクセストークンを読み取ることはできますが、有効でない可能性があります(有効期限が切れているか、ユーザーによって取り消されています):ユーザーがログインしていない可能性があります。
有効なアクセストークンがあります:ユーザーは確実にログインしています。
セッションでユーザーIDとアクセストークンを読み取ることができます。セッション配列は次のようになります。
[fb_148195765253871_access_token] => 14819576525...
[fb_148195765253871_user_id] => 1536397056
配列のキーの番号(ここ148195765253871
)はアプリIDです。
したがって、各ページで実行できることは、これらのキーが設定されているかどうかを確認し、設定されていない場合は、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>';
}
}
お役に立てば幸いです。