PHP: торгуй смело!

Никита Кислицин

Xakep, номер #056, стр. 056-078-2


Как с ними работать?

Полноценная поддержка сессий стала возможной только с переходом PHP на ядро Zend (полностью реализовано в PHP четвертой версии). В старых версиях интерпретатора поддержка сессий включалась посредством стандартных библиотек (например, знаменитой PHP Lib. или Prometheus Pr.). Но я настоятельно советую тебе обновиться до версии 4.3.2, ибо дырок там пока не найдено :).

Сессия порождается сразу после вызова процедуры session_start. Далее требуется зарегистрировать список переменных в сессии - тут не надо особо усердствовать, поскольку большой объем данных, сохраненный в пространстве сессии, отрицательно скажется на производительности сценария. Обычно достаточно записать одну недлинную строку. Регистрация идентификаторов выполняется при помощи процедуры session_register ("var_name1", .., "var_name2"). Обращаю внимание, что эта процедура принимает _имена_ идентификаторов, поэтому они должны указываться без символа $.

После того, как перемененные зарегистрированы, можно выполнять любые присваивания - данные сохранятся на сервере и будут доступны при следующих вызовах сценария.

Сейчас самое время рассказать о настройках пхп - конфигурации параметров работы с сессиями. Их довольно много, имеет смысл выделить несколько:

1) register_globals

Если он включен, то обращение к переменным сессии осуществляется напрямую по их имени, если же выключен, то следует использовать ассоциативный массив $HTTP_SESSION_VARS, используя в качестве ключа имя требуемой переменной.

2) session.save_path

Здесь указывается путь к папке, в которой будут храниться временные файлы сессий. Эту папку следует помещать на шустром винчестере и иметь в виду, что она, скорее всего, превратится в помойку и будет полна мелких файлов странного содержания.

3) session.use_cookies

Этот параметр определяет, надо ли использовать выпечку для хранения идентификатора сессии. Если значение этого параметра установлено в "1", то будут автоматически применяться кукисы, если же тут стоит ноль, то session id следует передавать иным способом, например, GET-запросом.

4) session.auto_start

Этот параметр определяет, следует ли создавать сессии автоматически при каждом вызове интерпретатора. Если тут стоит единица, отпадает всякая необходимость использовать функцию session_start, в противном случае это придется проделывать с каждым новым юзером.

5) session.cookie_lifetime

Данные в секундах, отражающие время жизни идентифицирующих сессию кукисов. Можно установить этот параметр равным нулю - в этом случае сессия будет сохраняться до тех пор, пока пользователь не закроет окно. Если же значение явно задано, то по истечении указанного срока cookie будет уничтожен браузером, а сессия будет считаться закрытой.

КодингЪ

Теория кончилась, теперь давай напишем административный интерфейс на сессиях. Первым делом, как всегда, следует описать ряд необходимых функций, взаимодействующих с базой данных. Такие задачи мы решали во многих предыдущих номерах, поэтому сегодня я позволю себе даже не упоминать про это - ты без труда разберешься в исходниках системы на CD. Сейчас же поговорим об организации хранения управляющей информации в сессиях.

Назад на стр. 056-078-1  Содержание  Вперед на стр. 056-078-3