Home News

Передача сериализованных объектов через сессию в 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

rss