Статьи,обзоры,справочники по PHP

Эта статья предназначена для новичков,



Автор: Денис Колисниченко, dhsilabs@mail.ru
Опубликовано: 20.02.2002
Оригинал: http://www.softerra.ru/review/program/16152/

Эта статья предназначена для новичков, которые еще не знакомы с этим замечательным механизмом, существенно облегчающим жизнь Web-программистам. Интерпретатор PHP4 можно скачать на сайте http://www.php.net/. Я использую версию 4.1.1, но даже, если у вас версия 4.0.0 все примеры из этой статьи будут работать.

Одним из недостатков интерфейса CGI является то, что любая CGI-программа не может длительное время «общаться» с пользователем: она должна запуститься, обработать переданные ей параметры и выдать какой-нибудь результат. Представьте себе, что вам нужно написать некоторую анкету, но полей в ней так много, что они не умещаются в одном окне броузера (а из-за этого, как всегда, страдает дизайн) или нужно обработать некоторые данные перед вводом следующих. Эту проблему можно решить путем использования временного файла. Но, предположим, что в один момент с анкетой работают два или более пользователей, тогда вариант с файлом отпадает сам по себе. Тогда вам нужно будет использовать базу данных, но стоит ли использовать целую базу данных для хранения промежуточных данных? Более продвинутые станут использовать Cookies. Это отличное решение, но PHP4 предоставляет более гибкое решение этой проблемы – механизм сессий. К тому же, у пользователя, зашедшего на ваш сайт, Cookies могут быть отключены. Механизм сессий по умолчанию используется Cookies, но если они отключены, ваши сценарии, использующие сессии, все равно будут работать. О том, как это достигается, поговорим немного позже.

Для идентификации пользователя используется идентификатор сессии – SID. Именно с его помощью можно определить, какой пользователь запустил сценарий. Идентификатор сессии хранится в Cookies броузера – вот для чего нужны Cookies! Фактически, SID – это имя временного хранилища, то есть имя временного файла, в котором PHP4 хранит информацию о сессии. Обычно эти файлы размещаются в каталоге /tmp.

Рассмотрим самый простой пример использования сессий (см. листинг 1).

<? session_name("SessionOfIvan"); session_start(); session_register("a"); $a=@$a+1; echo "<html><body>Нажмите Reload, чтобы увеличить счетчик"; echo "<br>Счетчик: $a"; echo "</body></html>";



?>

Функция session_start() инициализирует сессию, а функция session_register("a") регистрирует в сессии переменную $a. Имена переменных задаются без знака доллара. Можно несколько раз регистрировать одну и ту же переменную в сессии (что я и сделал в листинге 1) – ее значение не обнулится при повторной регистрации. Если запустить наш сценарий и несколько раз нажать кнопку броузера Reload, счетчик будет увеличиваться, а если закрыть окно броузера, счетчик обнулится. Следует также отметить, что сценарии, которые одновременно выполняются, ничего не знают друг о друге. Другими словами, если вы запустите сценарий и пару раз нажмете на кнопку Reload для изменения счетчика, а потом, не закрывая окна броузера, запустите броузер снова и запустите еще раз этот же сценарий – значение счетчика будет нулевым (в данном случае – 1). Если же вы откроете еще одно окно броузера (например, в Навигаторе – это команда меню File, New Navigator Window), значение счетчика не обнулится.

Проверить зарегистрирована ли переменная в сессии позволяет функция session_is_register(string $name). Отменить регистрацию какой-нибудь переменной можно с помощью функции session_unregister(string $name). Отменить регистрацию ВСЕХ переменных сессии можно с помощью функции session_unset().


Содержание раздела