8.5. Поддержка сеансов
Представленные в этом разделе функции работают с возможностями поддержки сеансов, которым располагает PHP. Возможность поддержки сеансов берет свое начало в таких технологиях, как Microsoft ASP и PHPLIB. Первоначальный замысел заключался в сохранении глобальных переменных, которые регистрируются как часть сеанса и сохраняются при загрузке каждой новой страницы. Разработчики PHP уже ушли от простых глобальных переменных, созданных в начале, и я нахожу целесообразным представлять эти функции в таком стиле. Поэтому можно порекомендовать использовать массив _SESSION вместо register_globals, что позволяет создать компактный и простой код. О назначении и применении сеансов см. в главе 7, "Операции ввода-вывода и доступ к диску".
Сеансы обслуживаются передаваемыми между сервером и браузером файлами cookie, в которых хранятся уникальные значения. Файлы cookie индексируют записи в системном кэше сеансов. Все значения в _SESSION записываются в кэш после завершения работы сценария. PHP восстанавливает содержимое массива _SESSION при обработке следующего запроса. Сеансы можно запустить вручную с помощью функции session_start или с помощью директивы session.auto_start в конфигурационном файле php.ini настроить PHP таким образом, чтобы он автоматически запускал сеансы.
Программный код, представленный в листинге 8.7, создает сеанс, и при этом ини­циализируются три переменные. Сценарий инкрементирует счетчик после каждого запроса, что свидетельствует о том, что PHP хранит значение счетчика сеанса и модифицирует его по завершении работы сценария.

| Листинг 8.7. Сеансовые переменные_
<?php
// запуск сеанса session_start();
//инициализировать набор переменных сеанса if(!isset($_SESSION['a']))
{
print("Инициализация сеанса <br>"); $_SESSION['a'] = 'Переменная сеанса A',-$_SESSION['b'] = 123.45; $_SESSION['c'] = 0;
}
//Модифицировать сеанс со счетчиком доступов $_SESSION['c']++;
print("Счетчик обращений: " . $_SESSION['c'] . "<br>"); print("Дамп сеанса: " . session_encode() . "<br>");
?>

 Так как сеансы используют файлы cookie, необходимо помнить, что последние соответствуют определенным доменам. Вы можете обнаружить, что файлы cookie, созданные для домена www1.yourdomain.com, теряются при переходе на домен www2.yourdomain.com. Во многих случаях выход есть: можно отредактировать кон­фигурационный файл php.ini или воспользоваться директивой session_set_ cookie_params. 
boolean output_add_rewrite_var(string name, string value)
Функция output_add_rewrite_var добавляет переменную и ее значение в реестр переменных, который добавляется ко всем URL. Дескриптор сеанса использует эту функциональную возможность для добавления к идентифицирующим тегам, отсылаемым в браузер идентификатора сеанса.
boolean output_reset_rewrite_vars()
Функция output_reset_rewrite_vars удаляет реестр переменных, добавленных ко всем URL.
integer session_cache_expire(integer minutes)
Функция session_cache_expire возвращает время в минутах, на протяжении которого сеанс может оставаться неактивным до того, как истечет срок его действия и система удалит его. Значение срока можно изменять. По умолчанию длительность сеансов составляет 180 минут.
string session_cache_limiter(string limiter)
Функция session_cache_limiter возвращает метод ограничения кэширования страниц, сгенерированных браузером. Необязательный аргумент позволяет вносить изменение в это ограничение. По умолчанию система использует установку nocache, которая предотвращает кэширование страниц большинством браузеров. Поддержка сеансов PHP предполагает, что срок действия страниц, для которых требуются идентификаторы сеансов, немедленно истекает. Это разумное допущение, но так бывает далеко не всегда. Эта функция позволяет отменить установку, сделанную в конфигурационном файле php.ini. В табл. 8.4 представлены четыре варианта огра­ничения и заголовки HTTP, которые они позволяют получить. Дата 19 ноября 1981 года - это прошедшая дата, при задании которой браузеры не будут кэшировать страницы; 10800 - это время в секундах, которое может изменяться в зависимости от значения, установленного функцией session_cache_expire. Время истечения срока действия, заданное ограничением public, является текущим временем. Для того чтобы лучше понять смысл информации, приведенной в табл. 8.4, следует обратить внимание на спецификацию HTTP/1.1 (<http://www.w3.org/Protocols/ rfc2068/rfc2068>).
boolean session_decode(string code)
Функция session_decode используется для чтения зашифрованных данных сеанса и значений глобальных переменных, использованных в сеансе. Это происходит автоматически при запуске сеанса функцией session_start.
boolean session_destroy()
Функция session_destroy уничтожает все данные, имеющие отношение к сеансу. Однако при этом не уничтожаются глобальные переменные, связанные с сеансом.
string session_encode()
Функция session_encode возвращает строку, содержащую зашифрованную информацию о текущем сеансе.
Браузер ввода-вывода
array session_get_cookie_params()
Функция session_get_cookie_params возвращает массив, описывающий файлы cookie данного сеанса. Возвращенный массив содержит следующие ключи: domain, lifetime, path и secure.