A free and open-source book on ZF3 for beginners


15.1. Сессии PHP

Для начала немного теории о том, что такое сессии. В PHP они работают следующим образом:

49) Cookie в HTTP - это небольшой фрагмент данных, отправленный веб-сайтом и хранящийся в браузере пользователя в то время, как он просматривает сайт. Cookie используются для сохранения какого-то состояния между HTTP-запросами.

С точки зрения разработчика PHP-приложения, работать с сессиями просто. Сперва вы инициализируете сессию, вызвав функцию session_start(). Затем воспользуйтесь суперглобальным массивом $_SESSION для задания/извлечения данных сессии. Например, для сохранения каких-либо данных в сессию, используйте следующий код:

session_start();
$_SESSION['my_var'] = 'Some data';

Чтобы затем извлечь данные из сессии, используйте данный код:

session_start();
if (isset($_SESSION['my_var']))
    $sessionVar = $_SESSION['my_var'];
else 
    $sessionVar = 'Some default value';

Для очистки данных используйте функцию PHP unset() как показано ниже:

unset($_SESSION['my_var']);

Обратите внимание, PHP-сессии не вечны (срок их действия рано или поздно заканчивается: тогда, когда заканчивается срок действия cookie пользователя, либо когда PHP-движок очищает файлы хранилища сессии). То, как долго будет длиться сессия, определяется в файле конфигурации php.ini. С помощью функции ini_set() возможно переопределить стандартные параметры срока действия, как показано ниже:

// Задаем время "жизни" cookie сессии (в секундах), равное 1 часу.
ini_set('session.cookie_lifetime', 60*60*1);

// Храним данные сессии на сервере до 1 месяца.
ini_set('session.gc_maxlifetime', 60*60*24*30);

В php.ini также существует несколько других, расширенных настроек конфигурации PHP, связанной с сессиями. Так как ими пользуются редко, мы не будем их рассматривать.

Итак, если сессии настолько простые, зачем мне использовать предоставляемую Zend Framework 3 обертку?

Эта обертка для PHP-сессий полезна, потому что:

  • она объектно-ориентирована, что значит, она хорошо подходит для вашего MVC-приложения.
  • ZF3 предоставляет концепцию пространств имен сессии, таким образом, разные модели могут хранить данные без конфликтов имен.
  • ZF3 предоставляет механизмы безопасности (валидаторы сессии), так что недоброжелателям сложнее взломать и подменить ваши данные сессий.
  • Использование суперглобального массива $_SESSION напрямую не очень хорошая идея, так как это усложняет процесс тестирования сайта. При использовании обертки проще подавать тестовые данные.
  • С помощью классов сессий ZF3 можно реализовать пользовательске хранилища данных сессий (например, можно хранить данные сессий не в файлах, а в базе данных).

Top