在 PHP $_SESSION 数组中存储 Facebook 会话时收到 "instance of __PHP_Incomplete_Class given"
Recieving "instance of __PHP_Incomplete_Class given" when storing the Facebook session in the PHP $_SESSION array
我正在尝试实现服务器端 PHP facebook 身份验证代码,以配合我的前端 Javascript Facebook 身份验证代码。
为此,我正在抓取当前的 facebook 会话,将其存储到 PGP $_SESSION 数组中,然后使用它进行调用以获取用户的用户名。
第二次进入侧边时,我检查 PHP $_SESSION 数组中是否有存储的 facebook 会话,如果有,我再次使用它来调用以获取用户名。这是我在尝试使用存储的会话时收到 "instance of __PHP_Incomplete_Class given" 错误消息的地方。
我想在页面刷新之间存储 facebook 会话的原因是每当我调用 $session = $helper->getSession();用户登录后第二次,我收到一条消息 "this authorization code has already been used"。我在某处读到你需要存储 facebook 会话,而不是每次刷新都调用一个新会话,因为 facebook 令牌已经在获取第一个会话对象时被消耗了。
任何人都可以帮我弄清楚如何正确地将 facebook 会话存储在 PHP $_SESSION 数组中,并能够将其拉回并用它来调用 facebook 吗?
我正在使用最新的 facebook JS sdk 和最新的 facebook PHP sdk。
代码:
<?php
session_start();
require_once ('facebookphpsdkv4/src/Facebook/GraphObject.php');
require_once ('facebookphpsdkv4/src/Facebook/GraphUser.php');
require_once ('facebookphpsdkv4/src/Facebook/GraphSessionInfo.php');
require_once ('facebookphpsdkv4/src/Facebook/Entities/AccessToken.php');
require_once ('facebookphpsdkv4/src/Facebook/FacebookSession.php');
require_once ('facebookphpsdkv4/src/Facebook/Entities/SignedRequest.php');
require_once ('facebookphpsdkv4/src/Facebook/FacebookSignedRequestFromInputHelper.php');
require_once ('facebookphpsdkv4/src/Facebook/FacebookJavaScriptLoginHelper.php');
require_once ('facebookphpsdkv4/src/Facebook/HttpClients/FacebookHttpable.php');
require_once ('facebookphpsdkv4/src/Facebook/HttpClients/FacebookCurl.php');
require_once ('facebookphpsdkv4/src/Facebook/HttpClients/FacebookCurlHttpClient.php');
require_once ('facebookphpsdkv4/src/Facebook/FacebookResponse.php');
require_once ('facebookphpsdkv4/src/Facebook/FacebookRequest.php');
require_once ('facebookphpsdkv4/src/Facebook/FacebookSDKException.php');
require_once ('facebookphpsdkv4/src/Facebook/FacebookRequestException.php');
require_once ('facebookphpsdkv4/src/Facebook/FacebookAuthorizationException.php');
useFacebookGraphObject;
useFacebookGraphUser;
useFacebookGraphSessionInfo;
useFacebookEntitiesAccessToken;
useFacebookFacebookSession;
useFacebookEntitiesSignedRequest;
useFacebookFacebookSignedRequestFromInputHelper;
useFacebookFacebookJavaScriptLoginHelper;
useFacebookHttpClientsFacebookHttpable;
useFacebookHttpClientsFacebookCurl;
useFacebookHttpClientsFacebookCurlHttpClient;
useFacebookFacebookResponse;
useFacebookFacebookRequest;
useFacebookFacebookSDKException;
useFacebookFacebookRequestException;
useFacebookFacebookAuthorizationException;
FacebookSession::setDefaultApplication('AppID', 'AppSecret');
if (isset($_SESSION['session']))
{
echo 'session set';
$session = $_SESSION['session'];
}
else
{
$helper = new FacebookJavaScriptLoginHelper();
try
{
$session = $helper->getSession();
$_SESSION['session'] = $session;
}
catch(FacebookRequestException $e)
{
echo "Exception occured, code: " . $e->getCode();
echo " with message: " . $e->getMessage();
}
catch(Exception $e)
{
echo "Exception occured, code: " . $e->getCode();
echo " with message: " . $e->getMessage();
}
}
if ($session)
{
try
{
$user_profile = (new FacebookRequest($session, 'GET', '/me'))->execute()->getGraphObject(GraphUser::className());
echo "Name: " . $user_profile->getName();
}
catch(FacebookRequestException $e)
{
echo "Exception occured, code: " . $e->getCode();
echo " with message: " . $e->getMessage();
}
}
?>
您遇到 __PHP_Incomplete_Class 错误,因为您在包含 class 文件之前获得会话(使用 session_start()
调用)。
您的会话变量中存在 PHP 未知类型的对象(因为您的要求是 在 您的 session_start()
之后),所以 PHP 不知道如何 "rebuild" 这些对象。
我正在尝试实现服务器端 PHP facebook 身份验证代码,以配合我的前端 Javascript Facebook 身份验证代码。
为此,我正在抓取当前的 facebook 会话,将其存储到 PGP $_SESSION 数组中,然后使用它进行调用以获取用户的用户名。
第二次进入侧边时,我检查 PHP $_SESSION 数组中是否有存储的 facebook 会话,如果有,我再次使用它来调用以获取用户名。这是我在尝试使用存储的会话时收到 "instance of __PHP_Incomplete_Class given" 错误消息的地方。
我想在页面刷新之间存储 facebook 会话的原因是每当我调用 $session = $helper->getSession();用户登录后第二次,我收到一条消息 "this authorization code has already been used"。我在某处读到你需要存储 facebook 会话,而不是每次刷新都调用一个新会话,因为 facebook 令牌已经在获取第一个会话对象时被消耗了。
任何人都可以帮我弄清楚如何正确地将 facebook 会话存储在 PHP $_SESSION 数组中,并能够将其拉回并用它来调用 facebook 吗?
我正在使用最新的 facebook JS sdk 和最新的 facebook PHP sdk。
代码:
<?php
session_start();
require_once ('facebookphpsdkv4/src/Facebook/GraphObject.php');
require_once ('facebookphpsdkv4/src/Facebook/GraphUser.php');
require_once ('facebookphpsdkv4/src/Facebook/GraphSessionInfo.php');
require_once ('facebookphpsdkv4/src/Facebook/Entities/AccessToken.php');
require_once ('facebookphpsdkv4/src/Facebook/FacebookSession.php');
require_once ('facebookphpsdkv4/src/Facebook/Entities/SignedRequest.php');
require_once ('facebookphpsdkv4/src/Facebook/FacebookSignedRequestFromInputHelper.php');
require_once ('facebookphpsdkv4/src/Facebook/FacebookJavaScriptLoginHelper.php');
require_once ('facebookphpsdkv4/src/Facebook/HttpClients/FacebookHttpable.php');
require_once ('facebookphpsdkv4/src/Facebook/HttpClients/FacebookCurl.php');
require_once ('facebookphpsdkv4/src/Facebook/HttpClients/FacebookCurlHttpClient.php');
require_once ('facebookphpsdkv4/src/Facebook/FacebookResponse.php');
require_once ('facebookphpsdkv4/src/Facebook/FacebookRequest.php');
require_once ('facebookphpsdkv4/src/Facebook/FacebookSDKException.php');
require_once ('facebookphpsdkv4/src/Facebook/FacebookRequestException.php');
require_once ('facebookphpsdkv4/src/Facebook/FacebookAuthorizationException.php');
useFacebookGraphObject;
useFacebookGraphUser;
useFacebookGraphSessionInfo;
useFacebookEntitiesAccessToken;
useFacebookFacebookSession;
useFacebookEntitiesSignedRequest;
useFacebookFacebookSignedRequestFromInputHelper;
useFacebookFacebookJavaScriptLoginHelper;
useFacebookHttpClientsFacebookHttpable;
useFacebookHttpClientsFacebookCurl;
useFacebookHttpClientsFacebookCurlHttpClient;
useFacebookFacebookResponse;
useFacebookFacebookRequest;
useFacebookFacebookSDKException;
useFacebookFacebookRequestException;
useFacebookFacebookAuthorizationException;
FacebookSession::setDefaultApplication('AppID', 'AppSecret');
if (isset($_SESSION['session']))
{
echo 'session set';
$session = $_SESSION['session'];
}
else
{
$helper = new FacebookJavaScriptLoginHelper();
try
{
$session = $helper->getSession();
$_SESSION['session'] = $session;
}
catch(FacebookRequestException $e)
{
echo "Exception occured, code: " . $e->getCode();
echo " with message: " . $e->getMessage();
}
catch(Exception $e)
{
echo "Exception occured, code: " . $e->getCode();
echo " with message: " . $e->getMessage();
}
}
if ($session)
{
try
{
$user_profile = (new FacebookRequest($session, 'GET', '/me'))->execute()->getGraphObject(GraphUser::className());
echo "Name: " . $user_profile->getName();
}
catch(FacebookRequestException $e)
{
echo "Exception occured, code: " . $e->getCode();
echo " with message: " . $e->getMessage();
}
}
?>
您遇到 __PHP_Incomplete_Class 错误,因为您在包含 class 文件之前获得会话(使用 session_start()
调用)。
您的会话变量中存在 PHP 未知类型的对象(因为您的要求是 在 您的 session_start()
之后),所以 PHP 不知道如何 "rebuild" 这些对象。