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

       

Обработчики сессии


PHP4 позволяет переопределить стандартные обработчики сессии, если они почему-то вас не устраивают.
В таблице 1 описаны все стандартные обработчики сессии PHP4.

Таблица 1.



Обработчик Назначение
session_handler_open(string $save_path, string $session_name) Данный обработчик вызывается при инициализации сессии, то есть, когда вызывается функция session_start(). Обычно этот обработчик открывает базу данных (или какой-нибудь файл) для группы сессий $session_name.
session_handler_close() Данный обработчик вызывается, когда нужно закрыть временное хранилище (вся информация уже записана)
session_handler_read(string $sid) Функция вызывается, когда нужно прочитать данные сессии. В качестве параметра передается идентификатор сессии – $sid.Функция возвращает данные сессии в формате: name1=value1;name2=value2;...;nameN=valueN; Под значением подразумевается сериализированные с помощью функции Serialize данные. Например, var1|i:10;var2|i:20, в сессии были сохранены две переменные – var1 и var2. Значение первой – 10, второй – 20.
session_handler_write(string $sid, string $data) Функция предназначена для записи данных сессии с указанным идентификатором. Параметр $data задается в вышеописанном формате.
session_handler_destroy(string $sid) Этот обработчик вызывается перед уничтожением сессии.
session_handler_gc(int $maxlifitime) Обработчик handler_gc вызывается после того, как сценарий завершил свою работу. Если пользователь окончательно «ушел» с вашего сервера, PHP должен удалить данные сессии. Вот именно для это и предназначена функция handler_gc. Параметр $maxlifetime – максимальное время существования сессии в секундах.

Вы, наверное, заметили, что имена обработчиков начинаются префиксом session_handler. Это не является обязательным: такой префикс я использовал для большего понимания и, главным образом, акцентирования вашего внимания, что данные функции являются обработчиками сессии. Вы же можете использовать любое удобное для вас имя.

Для переопределения обработчиков используется функция session_set_save_handler($open,$close,$read,$write,$destroy,$gc).


В качестве параметром нужно передать имена функций, которые будут использоваться как обработчики. Данную функцию нужно вызывать ДО инициализации сессии (вызова функции session_start()), иначе она просто будет проигнорирована.

Теперь рассмотрим пример переопределения обработчиков, который я позаимствовал из официальной документации по PHP (см. листинг 3).

Листинг 3. handlers.php

<? function open ($save_path, $session_name) { echo "open ($save_path, $session_name)\n"; return true; }

function close() { echo "close\n"; return true; }

function read ($key) { echo "write ($key, $val)\n"; return "foo|i:1;"; }

function write ($key, $val) { echo "write ($key, $val)\n"; return true; }

// Ничего не делает function destroy ($key) { return true; }

// Ничего не делает function gc ($maxlifetime) { return true; }

session_set_save_handler ("open", "close", "read", "write", "destroy", "gc");

session_start(); $foo++; ?>

Теперь выполните команду php handlers.php
В результате вы должны увидеть примерно следующее:
X-Powered-By: PHP/4.0.0 Set-Cookie: PHPSESSID=7401e923e7aca6d8c66bbf9db9cf6b08 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-cache, post-check=0, pre-check=0 Pragma: no-cache Content-type: text/html

open (/tmp, PHPSESSID) write (7401e923e7aca6d8c66bbf9db9cf6b08, ) write (7401e923e7aca6d8c66bbf9db9cf6b08, foo|i:2;) close


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