Пример: codomaza.com
Вход Регистрация

Передача сериализованных объектов через сессию в PHP

Сериализованный объект можно передавать между страницами 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>';

Результат:


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>';

Результат будет тот же что и в первом примере.


Комментировать

captcha

Вход

Зарегистрируйтесь, если нет учетной записи

Восстановить пароль
Регистрация
Восстановить пароль
Войти в личный кабинет