Работа с Zend_Session
Всем привет! В статье будет рассмотрено работа с сессией средствами ZendFramework.
Простейшая работ с сессией
$sess = new Zend_Session_Namespace('MyNS');
MyNS– название пространства имен, должно быть не NULL, не должен нач. с цифры и _
Если пространство имен не задано, то по умолчанию Default
Данная конструкция аналогична
$_SESSION[‘MyNS’]
Добавления данных в сессию:
$sess->someData = 'some info'; аналог $_SESSION['MyNS']['someData'] = 'some info';
Получение название пространства имен:
$sess->getNamespace();
Доступны магические методы
__isset(), __unset(), __get(), __set()
Расширенная работа сессий
Время жизни пространства имен
$sess = new Zend_Session_Namespace('MyNS'); $sess->someData = 'some info'; $sess->setExpirationSeconds(5, 'someData'); - время жизни ключа someData будет 5 сек $sess->setExpirationSeconds(3); - время жизни пространства имен Dialog будет 3 сек $sess->setExpirationHops(5 , 'someData'); - через 5 успешных обращений к ПИ (NS) someData будет удалена $sess->setExpirationHops(3); - через 3 «прыжка» всё ПИ будет удалено
Работа с массивами в пространствах имен
$sess = new Zend_Session_Namespace('MyNS'); $sess->array = array(); $sess->array['testKey'] = 1; // Не работает в версиях ниже PHP 5.2.1
Хранение сессии в БД
Если Вы используете высоко нагруженное веб-приложение и у вас стоит несколько серверов и есть аппаратные/программные средства по контролю за нагрузкой, то каждая страница может обрабатывать разные сервера, вспомним сайт Одноклассники. Из-за этого файл сессии может быть недоступен. Для устранения такой проблемы можно использовать хранение сессии в БД.
Вообще PHP позволяет переопределить место хранения сессии, переопределить ф-ции которые отвечают за открытие, закрытие, запись и тд сессии, за это отвечает ф-ция session_set_save_handler
Вот пример использования сессии средствами Зенда:
Создаем таблицу в БД CREATE TABLE `session` ( `id` char(32), `modified` int, `lifetime` int, `data` text, PRIMARY KEY (`id`) );
настраиваем Zend:
$db = DbManager::getInstance(); // тут получения объекта подключения к БД (у каждого может быть свой) Zend_Db_Table_Abstract::setDefaultAdapter($db); $config = array( 'name' => 'session', 'primary' => 'id', 'modifiedColumn' => 'modified', 'dataColumn' => 'data', 'lifetimeColumn' => 'lifetime' ); Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_DbTable($config)); Zend_Session::start(); // дальнейшая работа с сессией
Статья просмотренна 49362 раз, зашло посетителей 12328