|
(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();
// продолжить нормальное использование сессий
?>
|
|
|
|