За чистый и ясный код!

Статьи на тему программирования под веб, используя PHP, MySQL, Jquery и многое другое

Работа с Zend_Session

Июнь10

Всем привет! В статье будет рассмотрено работа с сессией средствами 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();

// дальнейшая работа с сессией

Статья просмотренна 32831 раз, зашло посетителей 8025

  

Облако тегов

cli csv dump events form Kohana locale models MySQL mysqldump orm PHP tools trigger validate газ газовый счетчик итоги кеширование переменные

Облако тегов плагина WP Cumulus для WordPress требует для просмотра Flash Player 9 или выше.

Я на твиттере!

  • у твиттера тоже бывают перерывы...

Календарь

Июль 2017
Пн Вт Ср Чт Пт Сб Вс
« Июл    
 12
3456789
10111213141516
17181920212223
24252627282930
31  

Сейчас на сайте