Передача сериализованных объектов через сессию в PHP
06.09.2018
Сериализованный объект можно передавать между страницами web-приложения не только при помощи файла , но и при помощи сессии. Приведём пример размещения в сессии строки с сериализованным объектом.
class ClassSerialize { public $serialize; public function __construct($serialize) { $this->serialize = $serialize; } } # Инициируем сессию; session_start(); # Создаём объект; $_obj_serialize = new ClassSerialize(1000); # Помещаем объект в сессию; $_SESSION['serialize'] = serialize($_obj_serialize); # Восстанавливаем объект; $new_serialize = unserialize($_SESSION['serialize']); # Выводим дамп; echo '<pre>'; print_r($new_serialize); echo '</pre>';Результат:
Временные хранилища данных Часть #7 5 Сериализация и десериализация
ClassSerialize Object ( [serialize] => 1000 )
Однако схема сохранения объекта в сессии, предоставленная в примере, достаточна опасна. Это связано с тем, что суперглобальный массив "$_SESSION" сам подвергается сериализации при помощи функции "serialize()" перед тем, как сохраняется в файл сессии. Если помимо объекта в сессию помещаются другие переменные, то полученная строка в результате сериализации объекта, может помешать восстановлению данных из файла сессии. Поэтому разумнее не подвергать объекты сериализации вообще, механизм сессий позаботится об этом самостоятельно.
Пример передачи объекта через сессию без сериализации:
class ClassSerialize { public $serialize; public function __construct($serialize) { $this->serialize = $serialize; } } # Инициируем сессию; session_start(); # Создаём объект; $_obj_serialize = new ClassSerialize(1000); # Помещаем объект в сессию; $_SESSION['serialize'] = $_obj_serialize; # Выводим дамп; echo '<pre>'; print_r($_SESSION['serialize']); echo '</pre>';Результат будет тот же что и в первом примере.
tillad
3404