Manual - Documentation - Zend Framework

Хоча базове використання є цілком допустимим варіантом використання сесій Zend Framework, варто розглянути інші можливості їхнього використання. У цій секції обговорюються тонкощі роботи з сесіями і показується більш досконале використання компонента Zend_Session.

Запуск сесії

Якщо ви хочете, щоб усі запити використовували сесії через Zend_Session, тоді запускайте сесію у файлі ініціалізації (bootstrap):

Example #1 Запуск глобальної сесії

Існує чотири способи запустити сесію за допомогою Zend_Session . Два з них – неправильні.

Неправильно: Не встановлюйте параметр PHP конфігурації » session.auto_start . Якщо у вас немає можливості відключити цей параметр у php.ini , ви використовуєте mod_php(або аналог), тоді додайте наступні рядки до вашого .htaccess файлу (Зазвичай знаходиться в кореневій директорії для HTML-документів):

Неправильно: Не використовуйте виклик PHP функції session_start() безпосередньо. Якщо ви викликаєте session_start() безпосередньо і потім починаєте використовувати Zend_Session_Namespace , Zend_Session::start() згенерує виняток ("session has already been started"). Якщо ви викликаєте session_start() після використання Zend_Session_Namespace або виклику Zend_Session::start() , то буде згенеровано помилку рівняE_NOTICEі виклик буде проігноровано.

Правильно: Використовуйте Zend_Session::start(). Якщо необхідно, щоб усі запити мали та використовували сесії, помістіть виклик цієї функції у коді ініціалізації близько до точки входу та без умовної логіки. У цьому є витрати з допомогою сесій. Якщо сесії потрібні лише деяким запитам, а решті - ні, то:

Встановіть опцію strict значенняTRUEвикористовуючиZend_Session::setOptions() у файлі ініціалізації.

Викликайте Zend_Session::start() тільки для запитів, яким потрібно використовувати сесії, до створення будь-якого об'єкта Zend_Session_Namespace .

Використовуйте " new Zend_Session_Namespace() " як завжди, там де потрібно, але переконайтеся, що Zend_Session::start() був викликаний раніше.

Опція strict запобігає автоматичному старту сесії з використанням Zend_Session::start() при викликі new Zend_Session_Namespace() Ця опція допомагає розробникам додатків користувача слідувати прийнятому при проектуванні рішенню не використовувати сесії для певних запитів, т.к. при встановленні цієї опції та подальшому інстанціюванні Zend_Session_Namespace до явного виклику Zend_Session::start() буде згенеровано виняток. Розробники повинні обережно підходити до використання Zend_Session::setOptions() , оскільки ці опції мають глобальну область дії, внаслідок їх зв'язку з опціями розширення ext/session, що лежать в основі.

Блокування просторів імен сесії

Можна заблокувати простір імен для запобігання зміні даних у ньому. Використовуйте метод lock() для того, щоб зробити певний простір імен доступним тільки для читання, unLock() - щоб зробити простір імен доступним для читання та змін, а isLocked() - для перевірки, чи не було простір імен заблоковано раніше. Блокування не зберігається від запиту до запиту, не діє на методи встановлення (setter methods) в об'єктах, збережених у цьому просторі імен, але запобігає використанню методів встановлення для заміни або видалення об'єктів, збережених безпосередньо у просторі імен. Аналогічно, блокування екземпляра Zend_Session_Namespace не перешкоджає використанню посилань на ті ж самідані (дивися » PHP references).

Example #2 Блокування простору імен сесії