Class User{ public $id; public $username; public $password; public $email; public $steam; public $donator; public $active; public function __construct($username, $email, $password, $id, $active, $donator, $steam){ $this->id = $id; $this->username = $username; $this->password = $password; $this->email = $email; $this->steam = $steam; $this->donator = $donator; $this->active = $active; }}
мой класс (упрощенный)
следующим является мой код:
$_SESSION['loggedIn'] = $user;
$ user – экземпляр класса пользователя
теперь это то, что print_r ($ _ SESSION ['loggedIn']) показывает мне:
__PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => User [id] => 22 [username] => xxxx [password] => xxxx [email] => xxxx [steam] => 1234567 [donator] => 0 [active] => 1 )
в которых xxxx являются правильными значениями.
но когда я пытаюсь извлечь данные из своей сессии. например: «$ _SESSION ['loggedIn'] -> username", он возвращает мне нулевое значение.
Вы должны сначала сериализовать объект в строку:
$_SESSION['user'] = serialize($user);
а также:
$user = unserialize($_SESSION['user']);
Просто убедитесь, что класс сначала определен перед тем, как выполнить арифметику объекта.
Вы можете хранить объекты в $_SESSION
. PHP будет сериализовать их для вас. Просто убедитесь, что класс определен перед вызовом session_start
, или что он может быть автоматически загружен . Причина, по которой значение, хранящееся в сеансе, имеет тип «__PHP_Incomplete_Class_Name», заключается в том, что класс User не был определен, когда объект был неэтериализован во время загрузки сеанса (как поясняется на странице руководства PHP по сериализации объектов ).
Ресурсы не могут быть сериализованы. Если вы когда-либо хранили объект, который использует ресурсы, реализуйте __sleep
и __wakeup
для настройки сериализации. Сериализация PHP должна обрабатывать все другие типы, даже если они содержат циклические ссылки.
В то время как на той же странице переменная session
действует как просто еще одна ошибка, поэтому вы можете делать с ней то, что хотите. Именно поэтому вы можете сохранить объект, пока он еще находится на этой странице.
Получив его позже, на самом деле покажет, подходит ли он для session
, чего нет в вашем случае.
Если вам действительно нужно сохранить этот объект, вы можете попытаться сохранить его как сериализованный объект и отменить его после извлечения. Это должно работать, хотя я не знаю, является ли это лучшим решением / дизайном. Прохождение объектов, подобных этому, можно считать немного … anti-pattern
Переменные $_SESSION
кажутся $_SESSION
только для хранения массивов, чисел и строк.
Они не могут хранить объект класса после перехода на новую страницу.