Intereting Posts
Отправка файла PHP затронута или нет с помощью max_input_time? Необходимо избегать ввода пользователем из базы данных? Создайте временную папку, чтобы сохранить файлы в структуре и сделать ее загружаемой путем сжатия папки Как обновить существующую страницу cms через установочный скрипт Как получить имя объекта или класса? Форматирование массива PHP для предложения SQL «IN» Лучший способ получить файлы из каталога, отфильтрованного определенным расширением в php "Ошибка анализа XML: нежелательная информация после элемента документа" PDO не возвращает результатов, тогда как командная строка MySQL возвращает ожидаемый результат Библиотека скрепок для PHP – phpQuery? CodeIgniter / jQuery – вызов Ajax возвращает полную html-страницу вместо моего эха Преобразование индексированного массива в обычный или простой массив SOAP-соединение с Royal Mail, невозможно подключиться к хосту Facebook XMPP Chat API отправить сообщение PHP CJuiDatePicker в CGridview как поле формы

Можно ли сохранить экземпляр класса в пространстве $ _SESSION?

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", он возвращает мне нулевое значение.

Solutions Collecting From Web of "Можно ли сохранить экземпляр класса в пространстве $ _SESSION?"

Вы должны сначала сериализовать объект в строку:

$_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 только для хранения массивов, чисел и строк.

Они не могут хранить объект класса после перехода на новую страницу.