Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Можно ли сохранить объект в сессии?


Автор: V0fka 17.6.2013, 20:13
Привет!

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

Автор: Arantir 17.6.2013, 20:34
Что за объект? Объект какого-то Вашего класса? Какие в нем поля?
Что значит "получается другой тип"? Объект читается из сессии уже после загрузки его класса (если у него есть класс)?

Вообще, объекты без проблем сохраняются в сессию. Не сохраниться могут только объекты с явно несохраняемыми полями, например, с подключением к базе данных (переменная типа resource, возвращаемая функциями подключения к бд, открытия сокетов и т.п.)

Автор: Gromdron 17.6.2013, 20:40
Ну, смотря какую информацию и о каком обьекте ?

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51bf441e6ccc19a453000002#findElement_E7045_51bf4a176ccc19e5730074b4_0

Автор: Sanchezzz 17.6.2013, 21:04
Дополню Arantir, 
Какие свойства класса сохранить можно через магический метод __sleep() который должен отдать результат в виде массива return array( 'prop1',prop2'); причем только public и как сказал Arantir если свойство класса содержит
Цитата

 (переменная типа resource, возвращаемая функциями подключения к бд, открытия сокетов и т.п.)

class::__wakeup() вызывается при  unserialize  в нем можно реализовать например реконект к БД.

Или использовать интерфейс Serializable(SPL),arrayObject(Spl) позволяет описать логику что сохранять и как.

Автор: V0fka 17.6.2013, 21:21
Цитата(Arantir @  17.6.2013,  20:34 Найти цитируемый пост)
Объект читается из сессии уже после загрузки его класса (если у него есть класс)?

Ёлки-палки. Я обращался к данным сессии до момента инициилизации файла с описанием класса. Спасибо, помогли! smile


Gromdron, и вам за ответ спасибо!

Добавлено @ 21:22
Sanchezzz, вам тоже за ответ спасибо! Причину почему у меня не работало - описал выше. То о чем вы написали, я возьму на заметку! smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)