Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
ли 
мы храним данные сессии в базе данных, мы просто должны удалить из нее все 
запи- 
си, доступ к которым не осуществлялся более, чем $maxlifetime секунд. Таким об- 

разом, "застарелые" временные хранилища будут иногда очищаться. 
На самом деле обработчик handler_gc() вызывается не при каждом запуске 
сценария, а только изредка. Когда именно — определяется конфигурационным 
параметром session.gc_probability. А именно, им задается (в процен- 
тах), какова вероятность того, что при очередном запуске сценария будет вы- 
бран обработчик "чистки мусора". Сделано это для улучшения производитель- 
ности сервера, потому что обычно сборка мусора — довольно ресурсоемкая 
задача, особенно если сессий много. 
Регистрация обработчиков 
Вы, наверное, обратили внимание, что при описании обработчиков я указывал их 
имена с префиксом handler. На самом деле, это совсем не является обязательным. 
Даже наоборот — вы можете давать такие имена своим обработчикам, какие только 
захотите. 
Но возникает вопрос: как же тогда PHP их найдет? Вот для этого и существует 
функ- 
ция регистрации обработчиков, которая говорит интерпретатору, какую функцию он 
должен вызывать при наступлении того или иного события. 
void session_set_save_handler($open,$close,$read,$write,$destroy,$gc) 
Эта функция регистрирует подпрограммы, имена которых переданы в ее параметрах, 
как обработчики текущей сессии. Параметр $open содержит имя функции, которая 
будет вызвана при инициализации сессии, а $close — функции, вызываемой при ее 
закрытии. В $read и $write нужно указать имена обработчиков, соответственно, 
для чтения и записи во временное хранилище. Функция с именем, заданным в 

Часть IV. Стандартные функции PHP 354 
$destroy, будет вызвана при уничтожении сессии. Наконец, обработчик, определяе- 

мый параметром $gc, используется как сборщик мусора. 
Эту функцию можно вызывать только до инициализации сессии, в противном случае 
она просто игнорируется. 
Пример: переопределение обработчиков 
Давайте напишем пример, который бы иллюстрировал механизм переопределения 
обработчиков. Мы будем держать временные хранилища сессий в подкаталоге 
sessiondata текущего каталога, и для каждого имени группы сессий создавать от- 
дельный каталог. 
Код листинга 25.2 довольно велик, но не сложен. Тут уж ничего не поделаешь — 
нам 
в любом случае приходится задавать все 6 обработчиков, а это выливается в 
"объе- 
мистые" описания. 
Листинг 25.2. Переопределение обработчиков сессии 
=$maxlifetime) { 
@unlink($fname); 
continue; 
} 
// Нашли не очень старый файл — значит, каталог точно 

Часть IV. Стандартные функции PHP 356 
// не будет в результате работы пуст. 
$DelDir=0; 
} 
closedir($d); 
// Если все файлы оказались слишком старые и удалены, 
// удалить и каталог 
if($DelDir) @rmdir($dir); 
return true; 
} 
// Регистрируем наши новые обработчики 
session_set_save_handler( 
"ses_
 
<<-[Весь Текст]
Страница: из 287
 <<-