I am attempting to implement the server side PHP facebook authentication code, to go with my front end Javascript Facebook authentication code.
For this, I am grabbing the current facebook session, storing it into the PGP $_SESSION array, and then using it to make a call to get the user's username.
On the 2nd time into the side, i check to see if we have the stored facebook session in the PHP $_SESSION array, and if so, I use that again to make the call to get the user name. This is where i recieve the "instance of __PHP_Incomplete_Class given" error message, when trying to use the stored session.
The reason i want to store the facebook session between page refreshes is that whenever i call $session = $helper->getSession(); a second time after the user logs in, i receive a message "this authorization code has already been used". I read somewhere that you need to store the facebook session, instead of calling for a new one each refresh, as the facebook token was already consumed in getting you the first session object.
Can anyone help me figure out how to store the facebook session in the PHP $_SESSION array correctly, and be able to pull it back out, and use it to make calls to facebook?
I am using the latest facebook JS sdk and the latest facebook PHP sdk.
CODE:
<?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();
}
}
?>
You have an __PHP_Incomplete_Class error because you get your sessions (with session_start()
call) before including you class files.
There are objects of a type unknown by PHP (as your requires are after your session_start()
) in your session variables, so PHP doesn't know how to "rebuild" theses objects.