| |
в виде отдельных HTML-документов. Это похоже на работу мастеров
Windows — диалоговых окон для ввода данных с кнопками Назад и Дальше, благо-
даря которым можно переместиться на шаг в любом направлении.
Например, в первом документе с диалогом у пользователя может запрашиваться его
имя и фамилия, во втором (если первый был заполнен верно) — данные о его месте
Часть IV. Стандартные функции PHP 346
жительства, и в третьем — номер кредитной карточки.
В любой момент можно вернуться на шаг назад, чтобы исправить те или иные дан-
ные. Наконец, если все в порядке, накопленная информация обрабатывается — на-
пример, помещается в базу данных.
Реализация такой схемы оказывается для Web-приложений довольно нетривиальной
проблемой. Действительно, нам придется хранить все ранее введенные данные в ка-
ком-нибудь временном хранилище, которое должно аннулироваться, если пользова-
тель вдруг передумает и "уйдет" с сайта. Для этого, как мы знаем, можно
использо-
вать функции сериализации и файлы. Однако ими мы решаем только половину
проблемы: нам нужно также как-то привязывать конкретного пользователя к кон-
кретному временному хранилищу. Действительно, предположим, что мы этого не
сделали. Тогда, если в момент заполнения какой-нибудь формы одним пользователем
на сайт "зайдет" другой и тоже попытается ввести свои данные, получится куча
мала.
Все эти проблемы решаются с применением сессий PHP, о которых сейчас и пойдет
речь.
Механизм работы сессий
Как же работают сессии? Для начала должен существовать механизм, который бы
позволил PHP идентифицировать каждого пользователя, запустившего сценарий. То
есть при следующем запуске PHP нужно однозначно определить, кто его запустил:
тот
же человек, или другой. Делается это путем присвоения клиенту так называемого
уникального идентификатора сессии. Чтобы этот идентификатор был доступен при
каждом запуске сценария, PHP помещает его в Cookies браузера.
Использовать Cookies не обязательно, существует и другой способ. Мы пого-
ворим о нем чуть позже.
Теперь, зная идентификатор (дальше для краткости я буду называть его SID), PHP
может определить, в каком же файле на диске хранятся данные пользователя.
Немного о том, как сохранять переменную (обязательно глобальную) в сессии. Для
этого мы должны ее зарегистрировать с помощью специальной функции. После реги-
страции мы можем быть уверены, что при следующем запуске сценария тем же
пользователем она получит то же самое значение, которое было у нее при предыду-
щем завершении программы. Это произойдет потому, что при завершении сценария
PHP автоматически сохраняет все переменные, зарегистрированные в сессии, во
вре-
менном хранилище. Конечно, можно в любой момент аннулировать переменную —
"вычеркнуть" ее из сессии, или же уничтожить вообще все данные сессии.
Где же находится то промежуточное хранилище, которое использует PHP? Вообще
говоря, вы вольны сами это задать, написав соответствующие функции и
зарегистри-
Глава 25. Управление сессиями 347
ровав их как обработчики сессии. Впрочем, делать это не обязательно: в PHP уже
существуют обработчики по умолчанию, которые хранят данные в файлах (в систе-
мах Unix для этого обычно используется директория /tmp). Если вы не собираетесь
создавать что-то особенное, вам они вполне подойдут.
Инициализация сессии
Но прежде, чем работать с сессией, ее необходимо инициализировать. Делается это
путем вызова специальной функции session_start().
Если вы поставили в настройках PHP режим session.auto_start=1, то
функция инициализации вызывается автоматически при запуске сценария. Од-
нако, как мы вскоре увидим, это лишает нас множества полезных возможно-
стей (например, не позволяет выбирать свою, особенную, группу сессий). Так
что лучше не искушать судьбу и вызывать session_start() в первой строч-
ке вашей программы. Следите также за тем, чтобы до нее не было никакого
вывода в браузер — иначе PHP не сможет установить SID для пользователя!
void session_start()
Эта функция инициализирует механизм сессий для текущего пользователя, запустив-
шего сценарий. По ходу инициализации она выполняет ряд действий.
r Если посетитель запускает программу впервые, у него устанавливается Cookies с
уникальным идентификатором, и создается временное хранилище, ассоциирован-
ное с этим идентификатором.
r Определяет
|
|