Zend_Session использует расширение ext/session и его суперглобальный
массив $_SESSION
в качестве механизма хранения
данных сессий. Несмотря на то, что $_SESSION
остается
доступным в глобальном пространстве имен, разработчики должны избегать
прямого обращения к нему с тем, чтобы Zend_Session мог наиболее
безопасно и эффективно предоставлять свой набор функциональных
возможностей для работы с сессиями.
Если при инстанцировании Zend_Session не было указано пространство
имен, то все данные будут неявным образом сохранены в пространстве
имен 'Default'
. Пример ниже демонстрирует использование
пространства имен 'Default'
и показывает, как
подчитывать количество просмотров страниц на вашем веб-сайте.
Добавьте следующий код в файл загрузки:
Пример 21.1. Подсчет количества просмотров страниц
<?php require_once 'Zend/Session.php'; $session = new Zend_Session(); // увеличение на единицу при каждой загрузке страницы $session->numberOfPageRequests++; echo "Запросов к страницам в течение данной сессии: ", $session->numberOfPageRequests; ?>
Одним из многих преимуществ Zend_Session является то, что многие модули приложения могут использовать Zend_Session, и он предоставляет им некоторый уровень инкапсуляции данных. Экземпляру Zend_Session можно передавать необязательный аргумент $namespace в конструкторе, который позволяет другим компонентам, модулям и разрабочикам определенного кода быть уверенным в том, что их данные защищены отделением от других областей данных, используемых другими компонентами, модулями и кодами разработчиков. Пространства имен предоставляют эффективный и общедоступный способ защиты данных сессий от случайных изменений. Имена пространств имен должны быть непустыми строками, не начинающимися со знака подчеркивания. Только основные компоненты, включенные в Zend Framework, должны использовать имена пространств имен, начинающиеся с 'Zend_'.
Пример 21.2. Новый подход: избежание конфликтов с помощью пространств имен
<?php // в компоненте Zend-Auth require_once 'Zend/Session.php'; $auth_session = new Zend_Session('Zend_Auth'); $auth_session->user = "myusername"; // в компоненте веб-сервисов $web_service_session = new Zend_Session('Some_Web_Service'); $web_service_session->user = "mywebusername"; ?>
Пример выше приводит к тому же результату, что и код ниже за тем исключением, что объекты сессий сохраняют инкапсуляцию сессионных данных внутри их пространств имен. Различные проверки, объединенные с паттерном синглетон (singleton) в Zend_Session_Core усиливают инкапсуляцию.
Zend_Session предоставляет полный интерфейс
IteratorAggregate,
включая поддержку выражения foreach
:
Обычные методы доступа доступны через "магические" методы (magic methods) __set(), __unset(), __isset() и __get(). "Магические" методы не должны импользоваться напрямую, кроме как внутри подклассов Zend_Session. Вместо этого используйте обычные операторы для вызова этих "магических" методов, например: