начиная с учебного пособия thinkdiff.net. Я создал простую тестовую страницу (локальная env) с линией входа / выхода в facebook. Если я вхожу в систему, я хочу, чтобы вывести fb API-интерфейс пользователя.
Я использую последнюю версию PHP SDK на facebook (v.2.1.2) .
Кажется, что работает, но когда я вышел из системы, я получаю это исключение:
FacebookApiException Object ( [result:protected] => Array ( [error] => Array ( [type] => OAuthException [message] => Error validating access token: The session is invalid because the user logged out or because auth.expireSession was invoked. ) ) [message:protected] => Error validating access token: The session is invalid because the user logged out or because auth.expireSession was invoked. [string:Exception:private] => [code:protected] => 0 [file:protected] => C:\wamp\www\fb\facebook.php [line:protected] => 543 [trace:Exception:private] => Array ( [0] => Array ( [function] => _graph [class] => Facebook [type] => -> [args] => Array ( [0] => /me ) ) [1] => Array ( [file] => C:\wamp\www\fb\facebook.php [line] => 492 [function] => call_user_func_array [args] => Array ( [0] => Array ( [0] => Facebook Object ( [appId:protected] => 1819654718***** [apiSecret:protected] => a2fccb8e93638b50c8d6b2********** [session:protected] => [signedRequest:protected] => [sessionLoaded:protected] => 1 [cookieSupport:protected] => 1 [baseDomain:protected] => [fileUploadSupport:protected] => ) [1] => _graph ) [1] => Array ( [0] => /me ) ) ) [2] => Array ( [file] => C:\wamp\www\fb\fb.php [line] => 33 [function] => api [class] => Facebook [type] => -> [args] => Array ( [0] => /me ) ) ) [previous:Exception:private] => )
это мой код тестовой страницы
$fbconfig['appid'] = "18196**********"; $fbconfig['api'] = "5c6910be575e4e688ac6d**********"; $fbconfig['secret'] = "a2fccb8e93638b50c8d6b2**********"; try { include_once "facebook.php"; } catch(Exception $o) { echo '<pre>'; print_r($o); echo '</pre>'; } // Create our Application instance. $facebook = new Facebook(array('appId' => $fbconfig['appid'],'secret' => $fbconfig['secret'],'cookie' => true)); $session = $facebook->getSession(); $fbme = null; // Session based graph API call. if (!empty($session)) { d($session); try { $uid = $facebook->getUser(); $fbme = $facebook->api('/me'); } catch (FacebookApiException $e) { d($e); } } function d($d) { echo '<pre>'; print_r($d); echo '</pre>'; } if ($fbme) { $logoutUrl = $facebook->getLogoutUrl(); echo"<a href='{$logoutUrl}'>logout</a>"; d($fbme); } else { $loginUrl = $facebook->getLoginUrl(array('req_perms' => 'email,read_stream,user_birthday')); echo"<a href='{$loginUrl}'>login</a>"; }
благодаря
Лука
Я попробую вручную очистить сеанс при выходе из системы. Поместите параметр GET в возвращаемый URL-адрес или используйте другой URL-адрес возврата, а затем выполните следующее:
$facebook->destroySession();
Проблема в том, что cookie сеанса сохраняется даже после выхода пользователя из системы. Когда пользователь возвращается на вашу страницу, вы пытаетесь использовать этот истекший сеанс для выполнения запросов. Удачи.
Хороший ответ, вы должны сначала вызвать destroySession ()
facebook->destroySession();
то вы можете вызвать getLoginUrl ()