Я могу просто войти в систему и отобразить имя пользователя.
<?php
require 'connectParse.php';
use Parse\ParseClient;
use Parse\ParseUser;
use Parse\ParseSessionStorage;
session_start();// set session storage
ParseClient::setStorage( new ParseSessionStorage() );
try {
$user = ParseUser::logIn("user", "pass");
// Do stuff after successful login.
} catch (ParseException $error) {
// The login failed. Check error to see why.
}
$currentUser = ParseUser::getCurrentUser();
$currentUser = $currentUser->get("username");
echo $currentUser;
?>
<a href="/second.php">second page</a>
Но когда я перехожу на другую страницу на том же сервере и проверяю текущего пользователя, я ничего не получаю.
<?php
require 'connectParse.php';
use Parse\ParseClient;
use Parse\ParseUser;
use Parse\ParseSessionStorage;
session_start();
$currentUser = ParseUser::getCurrentUser();
print_r( "<p>" . $currentUser . " </p><p>is the user</p>" );
?>
Это единственные фрагменты кода на странице входа и на другой странице. Я пытался с и без session_start (); на второй странице. И, конечно же, пользователь существует на другой странице. Потратил много часов и ничего с этим не получил. Я могу взломать его, установив свои собственные переменные SESSION, но я хочу использовать функциональность Parse. Я полагаю, что это что-то действительно простое, что мне не хватает … хотелось бы любить любить любую помощь там! Спасибо и ура!
Вам необходимо начать сеанс ПОСЛЕ включения автозагрузчика. Это чтобы избежать проблемы неполных классов. Parse\ParseUser
еще не был загружен, когда PHP пытался десериализовать объект в сеансе.
Вызов session_start();
после require '../vendor/autoload.php';
и ДО ParseClient::initialize('app_id', 'key', 'masterkey');
,
Вам не нужно использовать ParseClient::setStorage( new ParseSessionStorage() );
как будто сеанс активен, ParseClient :: initialize будет использовать его по умолчанию.
Тогда вы можете получить текущий пользователь. Это все.
Это не ответ, а некоторая помощь в отладке
Может быть, кто-то это поймет
Я тоже бегу к этой проблеме. Я смог расшифровать следующее.
Данные $ _SESSION фактически меняются между страницами.
На странице входа я добавил print_r($_SESSION)
а также на совершенно другой странице. Следующие две строки являются их результатами соответственно
Страница авторизации:
Array ( [parseData] => Array ( [user] => Parse\ParseUser Object ( [_sessionToken:protected] => someProtectedToken [serverData:protected] => Array ( [email] => [email protected] [emailVerified] => 1 [firstlast] => firstName lastName [isBand] => [username] => [email protected] ) [operationSet:protected] => Array ( ) [estimatedData:Parse\ParseObject:private] => Array ( [email] => [email protected] [emailVerified] => 1 [firstlast] => firstName lastName [isBand] => [username] => [email protected] ) [dataAvailability:Parse\ParseObject:private] => Array ( [email] => 1 [emailVerified] => 1 [firstlast] => 1 [isBand] => 1 [sessionToken] => 1 [username] => 1 ) [className:Parse\ParseObject:private] => _User [objectId:Parse\ParseObject:private] => GVw0Thu61i [createdAt:Parse\ParseObject:private] => DateTime Object ( [date] => 2014-12-31 21:51:26 [timezone_type] => 2 [timezone] => Z ) [updatedAt:Parse\ParseObject:private] => DateTime Object ( [date] => 2014-12-31 21:51:51 [timezone_type] => 2 [timezone] => Z ) [hasBeenFetched:Parse\ParseObject:private] => 1 ) ) )
какая-то случайная страница:
Array ( [parseData] => Array ( [user] => __PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => Parse\ParseUser [_sessionToken:protected] => someProtectedToken [serverData:protected] => Array ( [email] => [email protected] [emailVerified] => 1 [firstlast] => firstName lastName [isBand] => [username] => [email protected] ) [operationSet:protected] => Array ( ) [estimatedData:Parse\ParseObject:private] => Array ( [email] => [email protected] [emailVerified] => 1 [firstlast] => firstName lastName [isBand] => [username] => [email protected] ) [dataAvailability:Parse\ParseObject:private] => Array ( [email] => 1 [emailVerified] => 1 [firstlast] => 1 [isBand] => 1 [sessionToken] => 1 [username] => 1 ) [className:Parse\ParseObject:private] => _User [objectId:Parse\ParseObject:private] => GVw0Thu61i [createdAt:Parse\ParseObject:private] => DateTime Object ( [date] => 2014-12-31 21:51:26 [timezone_type] => 2 [timezone] => Z ) [updatedAt:Parse\ParseObject:private] => DateTime Object ( [date] => 2014-12-31 21:51:51 [timezone_type] => 2 [timezone] => Z ) [hasBeenFetched:Parse\ParseObject:private] => 1 ) ) )
Обратите внимание, что [user] => __PHP_Incomplete_Class Object
Код: login.php
<?php
require '../vendor/autoload.php';
session_start();
include 'head.php';
include 'nav.php';
use Parse\ParseClient;
use Parse\ParseUser;
use Parse\ParseObject;
use Parse\ParseQuery;
use Parse\ParseACL;
use Parse\ParsePush;
use Parse\ParseInstallation;
use Parse\ParseException;
use Parse\ParseAnalytics;
use Parse\ParseFile;
use Parse\ParseCloud;
use Parse\ParseSessionStorage;
ParseClient::initialize('a', 'b', 'c');$name = $_POST["user"];
$password = $_POST["password"];try {
$user = ParseUser::logIn($name, $password);
echo "you are in. hello: " .ParseUser::getCurrentUser()->get("firstlast") ;
} catch (ParseException $error) {
echo "wrong info";
}
include 'foot.php';
КОД: для случайной страницы
<?php
require '../vendor/autoload.php';
session_start();
use Parse\ParseClient;
use Parse\ParseUser;
use Parse\ParseObject;
use Parse\ParseQuery;
use Parse\ParseACL;
use Parse\ParsePush;
use Parse\ParseInstallation;
use Parse\ParseException;
use Parse\ParseAnalytics;
use Parse\ParseFile;
use Parse\ParseCloud;
use Parse\ParseSessionStorage;
ParseClient::initialize('app_id', 'key', 'masterkey');
print_r($_SESSION);
?>
Похоже, что это может быть дубликат этого вопроса здесь: Пользователь не распознан через Parse \ ParseUser, но существует в $ _SESSION
Однако, как правило, вы хотите, чтобы сеанс создавался до запуска чего-либо еще, поэтому вы можете попробовать переместить session_start();
позвоните в начало вашего файла.
Пример:
<?php
session_start();
require 'connectParse.php';
use Parse\ParseClient;
use Parse\ParseUser;
use Parse\ParseSessionStorage;
$currentUser = ParseUser::getCurrentUser();
print_r( "<p>" . $currentUser . " </p><p>is the user</p>" );
?>