Истинная система шаблонов нужна в ситуациях, при которых возникает реальная необходимость разделения логики представления и логики приложения. Хотя далее в настоящей главе еще будет говориться о профессиональной системе шаблонов Smarty, написанной на РНР, это мало поможет вам, если вы еще не знакомы с идеей, которая лежит в основе.
По мере роста популярности РНР был быстро адаптирован разработчиками Web-приложений по всему миру, и одна из причин этого была связана с исключительной простотой его изучения. Легкость разработки сделала РНР одним из лучших языков быстрой разработки и прототипирования приложений.
Несмотря на то что сеансы в РНР — очень простое в использовании средство, существует много тонкостей и настроек, предназначенных для получения максимальной гибкости этого механизма. В этом разделе рассматриваются конфигурационные директивы и связанные с сеансами функции, не рассмотренные ранее, и разъясняется их использование в реальных PHP-сценариях.
Разобравшись с основами использования сеансов, давайте внимательно изучим их внутреннее устройство. По умолчанию РНР предлагает три внутренних метода хранения данных сеанса, указываемые в session.save_handler: внутренний формат файла PHP-сеанса (определенный php), внутри базы данных SQLite (определенный sqlite) и формат пакета WDDX (определенный wddx).
Теперь, когда вы представляете, как работают сеансы, давайте разберемся, что же практически нужно для корректной работы с сеансами. Как известно, каждый сеанс идентифицируется в РНР через идентификатор сеанса, который обычно сохраняется на клиентской машине в виде HTTP cookie-набора. Если поддержка cookie-наборов отсутствует, идентификатор сеанса должен передаваться через URL.
Другая необходимость, возникающая при работе с сеансами — определить, были ли зарегистрированы сеансовые переменные. Это можно сделать с помощью оператора isset, позволяющего проверить существование соответствующего ключа в массиве $_SESSION, или функции session_is_registered(): session_is_registered($name) где $name — строка, представляющая имя сеансовой переменной, которую нужно проверить. Эта функция возвращает true, если переменная была зарегистрирована, и false — если нет.
Существуют моменты (например, когда пользователь покидает сайт), когда сеансовые переменные нужно удалить. Это можно сделать, уничтожив весь сеанс или удалив только некоторые сеансовые переменные. Для удаления определенных переменных можно использовать оператор unset, удаляющий элемент из суперглобального массива
В этом разделе обсуждаются основы регистрации, отмены регистрации и работы с сеансовыми переменными в РНР. Важно заметить, что манипулирование сеансовыми переменными с помощью представленных здесь функций, таких как
Одним из наиболее полезных применений cookie-наборов является возможность создания сеансов, которые в действительности позволяют преодолеть отсутствие поддержки состояния протокола HTTP. При работе с сеансами в РНР есть возможность сохранять переменные (включая массивы и классы) между запусками сценариев и вызывать их позднее. Для функционирования такой системы Web-сервер должен иметь возможность отличать один браузер от другого, и в этом заключается роль cookie-наборов.