Ich habe Facebook-Login für meine Website eingerichtet und alles funktioniert, außer wenn die PHP-Sitzung abläuft. Nachdem es abgelaufen ist und ich die Seite aktualisiere, denkt meine Website, dass der Benutzer ausgeloggt ist. Nachdem eine Seite ein zweites Mal aktualisiert wurde, wird der Benutzer wieder eingeloggt. Ich gehe davon aus, dass die JavaScript-Bibliothek etwas tut. Ich möchte nicht auf die JavaScript-Bibliothek angewiesen sein, weil ich Ajax-Aufrufe mache und in der Lage sein muss, sich erneut anzumelden, wenn die Sitzung nur durch PHP abgelaufen ist.PHP Facebook v5 bekommen Sitzung von Cookie
Ich habe $ _COOKIE worden Ausdrucken Übersicht über die Facebook-Cookies zu halten, und ich sehe, dass nach der Sitzung sie noch existieren:
Array
(
[fbm_1575590742733556] => base_domain=.mysite.us
[fbsr_1575590742733556] => 1OdQYsdikidaL08RnVXbEc1ZmU3OTNBcHVDONlZEVjckVPZGZSeWZwT1Z6ZTEyVWVXaXY5b1VlSUJqMFo5UnhKRnFlMUJxV0hQMmticGVDRnBPRmt5dsafdsafsdfdsafdsafasdfdsdsafdsaZXzg1T3dmS1JIdzZ1bjRUU3pKMnEyTXF6Vm5aUazS2AtDxUav3xMNz2PAPl2dyfE.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImNvZGUiOiJBUUF1ZVZ2UU01TkZtVUwtQXYyQXla1c1VURkYmtBbHJOdS04OWxYUWZRc0laUTd3T2xhX0RqRU5EMWh2MklBa21rTnpNZHpueTEFROVR4Yk5PYWVTbDFMZG5vMTJnaU1IS0ZPNEdHMXFYUmx6RzFWQ2tzQ0N1ZVZDU2lmYllfUEtaOGxpUktNNFM0RlBHa3pS1wLUxZQlhDVHhUMXFMWjVqNHBVdVZORVFvMGNaMmtSeUI0T202TzAwNDd2ZFhTYmRPOTU3N0VWZEczbUVyaUpkZVhPdHNzOGwtZl9Hc1JKayIsImlzc3VlZF9hdCI6MTQ2NjczNDMxMSwidXNlcl9pZCI6IjEwMTgzOTQ5MDI0NTQyNSJ9
)
Auf jeder Seite Last nenne ich die Funktion:
public static function CheckToken()
{
// Get a token if we dont have one
if (!isset($_SESSION['fb_access_token']))
{
$helper = self::$api->getJavaScriptHelper();
try {
// Get the acess token
$accessToken = $helper->getAccessToken();
// OAuth 2.0 client handler
$oAuth2Client = FacebookProxy::$api->getOAuth2Client();
// Exchanges a short-lived access token for a long-lived one
$longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);
// Store the access token
$_SESSION['fb_access_token'] = (string) $longLivedAccessToken;
}
catch(Facebook\Exceptions\FacebookResponseException $e)
{
// When Graph returns an error
$response['errors'][] = 'Graph returned an error: ' . $e->getMessage();
}
catch(Facebook\Exceptions\FacebookSDKException $e)
{
// When validation fails or other local issues
$response['errors'][] = 'Facebook SDK returned an error: ' . $e->getMessage();
}
}
// Set the default access token
if(isset($_SESSION['fb_access_token']))
{
self::$api->setDefaultAccessToken($_SESSION['fb_access_token']);
return true;
}
return false;
}
public static function SignInUser()
{
$errors = array();
if(isset($_GET['test'])) echo "CHECK TOKEN";
if(self::CheckToken() == true)
{
if(isset($_GET['test'])) ECHO "WE HAVE A TOKEN";
// Get info about the user
$fbuser = self::GetMyInfo(array("id","email","name","first_name","last_name"));
// Check if there is already a user with this info
$user = User::GetBy("id_facebook", $fbuser['id']);
if($user->isValid() == false)
{
$errors = null;
$user = User::Create($fbuser['email'], null, $errors);
// User already exists
if($user == false) {
$user = User::GetByEmail($fbuser['email']);
}
}
if($user != null)
{
$user->Set("id_facebook", $fbuser['id']);
$user->Set("first_name", $fbuser['first_name']);
$user->Set("last_name", $fbuser['last_name']);
$user->Save($errors);
}
else
{
$errors[] = "There was an error creating your account.";
}
if(count($errors) == 0)
{
if(isset($_GET['test'])) ECHO "SIGNING IN!";
$user->SignIn();
}
}
if(isset($_GET['test'])) ECHO "END TOKEN";
return $errors;
}
Ich denke, mein Problem ist irgendwo in der CheckToken-Funktion. Gibt es eine Möglichkeit, das Token aus der Facebook-Bibliothek zu erhalten? Ist es einfach einfach, $ _SESSION ['fb_access_token'] auf die im Cookie gespeicherte Zeichenfolge zurückzusetzen? Ich nehme an, dass die Zahl nach fbsr_ dynamisch erstellt wird, wie kann ich bestimmen, was geladen wird. Wenn mehrere Benutzer authentifiziert sind, gibt es mehrere Cookies, die möglicherweise hier gespeichert werden können?
Update: ich auf die manuell versucht Zeichenfolge im Cookie gespeichert, um die Session-Token Einstellung aber, dass jetzt gibt mir Facebook Ausnahmefehler:
Fatal error: Uncaught exception 'Facebook\Exceptions\FacebookServerException' with message 'Expected 1 '.' in the input between the postcard and the payload' in facebook_v5/Exceptions/FacebookResponseException.php:105 Stack trace: #0 facebook_v5/FacebookResponse.php(210): Facebook\Exceptions\FacebookResponseException::create(Object(Facebook\FacebookResponse)) #1 facebook_v5/FacebookResponse.php(255): Facebook\FacebookResponse->makeException() #2 facebook_v5/FacebookResponse.php(82): Facebook\FacebookResponse->decodeBody() #3 facebook_v5/FacebookClient.php(225): Facebook\FacebookResponse->__construct(Object(Facebook\FacebookRequest), '{"error":{"mess...', 400, Array) #4 facebook_v5/Facebook.php(504): Facebook\FacebookClient->sendRequest(Object(Fa in facebook_v5/Exceptions/FacebookResponseException.php on line 105