 |
(PHP
4) session_set_save_handler - устанавливает пользовательские функции хранения
сессии. Описаниеbool session_set_save_handler
(string open, string close, string read, string write, string destroy, string
gc) session_set_save_handler() устанавливает пользовательские функции
хранения сессии, которые используются для хранения и запрашивания данных, ассоциированных
с сессией. Это чаще всего используется, когда метод хранения отличается от методов
PHP-сессий. Например, при хранении данных сессии в локальной БД. Возвращает TRUE
при успехе, FALSE при неудаче. Примечание:
вы обязаны установить в опции конфигурации session.save_handler
значение user в вашем файле php.ini, для того чтобы session_set_save_handler()
работала.
Примечание: обработчик "write"
не выполняется после закрытия потока вывода. Таким образом, вывод отладочных операторов
в обработчике "write" никогда не будет виден в браузере. Если необходим вывод
отладки, можно записать его в файл.
В следующем примере показано
хранение данных сессии в файле, аналогично обработчику по умолчанию PHP-сессий
files. Этот пример можно легко расширить для покрытия хранения
БД с использованием вашей любимой машины работы с БД, поддерживаемой в PHP. Функция
read должна всегда возвращать значение, чтобы обработчик сохранения всегда работал,
как ожидается. Возвращает пустую строку, если нет данных для чтения. Return-значения
из других обработчиков конвертируются в булево выражение. TRUE при успехе, FALSE
при неудаче. Пример
1. session_set_save_handler()
<?php function open ($save_path, $session_name) { global $sess_save_path,
$sess_session_name; $sess_save_path = $save_path; $sess_session_name = $session_name;
return(true); } function close() { return(true); } function read ($id) { global
$sess_save_path, $sess_session_name; $sess_file = "$sess_save_path/sess_$id";
if ($fp = @fopen($sess_file, "r")) { $sess_data = fread($fp, filesize($sess_file));
return($sess_data); } else { return(""); // Здесь обязана возвращать "". } } function
write ($id, $sess_data) { global $sess_save_path, $sess_session_name; $sess_file
= "$sess_save_path/sess_$id"; if ($fp = @fopen($sess_file, "w")) { return(fwrite($fp,
$sess_data)); } else { return(false); } } function destroy ($id) { global $sess_save_path,
$sess_session_name; $sess_file = "$sess_save_path/sess_$id"; return(@unlink($sess_file));
} /******************************************************************* * ПРЕДУПРЕЖДЕНИЕ
- Вам понадобится реализовать здесь какой-нибудь * * вариант утилиты уборки мусора.
* *******************************************************************/ function
gc ($maxlifetime) { return true; } session_set_save_handler ("open", "close",
"read", "write", "destroy", "gc"); session_start(); // продолжить нормальное использование
сессий ?> | |
|  |