php сохранение объекта в сессии - PullRequest
6 голосов
/ 29 января 2011

Я пытаюсь сохранить объект в $_SESSION, но следующее:

<?php

$user = db->load( $username, $pass ) ;
$_SESSION[ 'user' ] = $user ;

# on subsequent page loads:
$user = $_SESSION[ 'user' ] ; #retrieve the user from session

К сожалению, это не работает.

Сценарий попытался выполнить метод или получить доступ к свойству незавершенного объекта. Убедитесь, что определение класса «Пользователь» объекта, с которым вы пытаетесь работать, было загружено _before_ unserialize (), вызвано или предоставьте функцию __autoload () для загрузки определения класса

Если вы не используете serialize ():

<?php

$user = db->load( $username, $pass ) ;
$_SESSION[ 'user' ] = serialize( $user ) ;

# on subsequent page loads:
$user = unserialize( $_SESSION[ 'user' ] ) ; #retrieve the user from session

Я предполагаю, что требуется сериализация, потому что информация о сеансе сохраняется на диск. Но разве PHP не должен быть достаточно умным, чтобы сериализовать вещи самостоятельно?

И с использованием serialize / _ unserialize _, это будет работать надежно? Или мне нужен __serialize() метод в моем классе PHP?

Ответы [ 5 ]

4 голосов
/ 29 января 2011

Вам понадобится __serialize() в вашем классе, если ваш объект должен выполнить какое-то действие перед сериализацией. Например, если он имеет ссылку на открытый файл и этот файл необходимо правильно закрыть перед сериализацией.

1 голос
/ 29 января 2011

Не могли бы вы использовать var_export ?Я только что узнал об этом сегодня, так что, возможно, это не так уж и важно.

0 голосов
/ 27 февраля 2014

Вероятно, лучший подход в эти дни - реализовать Сериализуемый интерфейс с вашим классом.

0 голосов
/ 29 января 2011

Лучшее использование

json_encode()  json_decode()
0 голосов
/ 29 января 2011

Что касается компилятора php, все, что вы делаете - это записываете объект (сериализованный) в Array, это другой процесс, который обеспечивает доступ к $ _SESSION на следующей странице.Сериализация не имеет ничего общего с записью на диск, а связана с памятью, так как память, выделенная для различных методов вашего объекта, не будет доступна на следующей странице.Сериализация - это то, как PHP удерживает объекты на страницах, и вы должны сделать это сами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...