Содержание
Работа с сессией
Краткое описание
Для работы с сессией, в Limb есть специальный объект session, который можно получить через тулкит:
$session = lmbToolkit :: instance()->getSession();
$session->set('my_var', $value); // Поставить значение в сессию
$var = $session->get('my_var'); // Получить значение из сессии
Классы, реализующие работу с сессией, находятся в пакете SESSION.
Преимущества использования пакета SESSION:
- Возможность легкой смены способа хранения сессионных данных. На данный момент поддерживается хранение сессионных данных в базе данных и при помощи файлов.
- Автоматическое подключение необходимых классов до десериализации сессии. Вам не нужно больше об этом заботиться.
- Единый set/get интерфейс для установки и получения данных из сессии. Это позволяет в случае необходимости, например, передать сессию в WACT-шаблон в качестве контейнера с данными.
- Легкое установление и сброс фикстур при модульном тестировании.
Метод getSession() реализован в классе lmbWebAppTools.
Инициализация сессии. Фильтр lmbSessionStartupFilter
При работе с сессией используются 2 понятия:
- Класс для работы с сессионными данными
- Хранилище данных.
Хранище сессионных данных необходимо инициализировать. Инициализация производится в класса lmbSessionStartupFilter, который обычно входит в цепочку фильтров приложения, выполненного на базе Limb3.
lmbSessionStartupFilter опирается на константу LIMB_SESSION_USE_DB_DRIVER для определения, какой тип хранилица сессионных данных использовать.
- Если LIMB_SESSION_USE_DB_DRIVER имеет значение false (это значение по-умолчанию), то используется базовый php-механизм хранения в файлах (класс lmbSessionNativeStorage)
- LIMB_SESSION_USE_DB_DRIVER имеет значение true, то создается хранилище на основе таблицы базы данных (класс lmbSessionDbStorage)
При использовании класса lmbSessionDbStorage в качестве хранилища (вернее сказать, драйвера хранилища) сессионных данных, вы можете также использовать константу LIMB_SESSION_DB_MAX_LIFE_TIME, которая указывает время жизни сессии между двумя обращениями. Если эта константа не определена - то будет использоваться значение указанное в системных настройках для PHP.
Для хранения сессионных данных в базе данных используется таблице sys_session со следующей структурой:
CREATE TABLE `sys_session` ( `session_id` VARCHAR(50) NOT NULL DEFAULT '', `session_data` BLOB NOT NULL, `last_activity_time` BIGINT(11) UNSIGNED DEFAULT NULL, PRIMARY KEY (`session_id`), KEY `user_id` (`user_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Обсуждение