Зачем переопределять обработчики в сессии?
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Зачем переопределять обработчики в сессии? - 2007-09-13 14:07:29.260000
|
|
|
Bios_inside
Сообщений: 626
Оценки: 0
Присоединился: 2007-02-23 10:44:18.170000
|
Вот решил почитать про сиссии в PHP. И нашол тут здоровенный скрипт "Переопределение обработчиков сессии":
[font=verdana]<?
// Возвращает полное имя файла временного хранилища сессии.
// В случае, если нужно изменить тот каталог, в котором должны
// храниться сессии, достаточно поменять только эту функцию
function ses_fname($key)
{
return "sessiondata/".session_name()."/$key";
}
// Заглушки — эти функции просто ничего не делают
function ses_open($save_path, $ses_name) { return true; }
function ses_close() { return true; }
// Чтение данных из временного хранилища
function ses_read($key)
{
// Получаем имя файла и открываем файл
$fname=ses_fname($key);
$f=@fopen($fname,"rb"); if(!$f) return "";
// Читаем до конца файла
$st=fread($f,filesize($fname));
fclose($f);
return $st;
}
// Запись данных сессии во временное хранилище
function ses_write($key, $val)
{
$fname=ses_fname($key);
// Сначала создаем все каталоги (в случае, если они уже есть,
// игнорируем сообщения об ошибке)
@mkdir($d=dirname(dirname($fname)),0777);
@mkdir(dirname($fname),0777);
// Создаем файл и записываем в него данные сессии
$f=@fopen($fname,"wb"); if(!$f) return "";
fwrite($f,$val);
fclose($f);
return true;
}
// Вызывается при уничтожении сессии
function ses_destroy ($key)
{
return @unlink(ses_fname($key));
}
// Сборка мусора — ищем все старые файлы и удаляем их
function ses_gc($maxlifetime)
{
$dir=ses_fname(".");
// Получаем доступ к каталогу текущей группы сессии
$d=@opendir($dir); if(!$d) return false;
$DelDir=1; // Признак того, что каталог пуст, и его можно удалить
// Читаем все элементы каталога
while(($e=readdir($d))!==false) {
// Если это "точки", пропускаем их
if($e=="."||$e=="..") continue;
// Файл слишком старый?
if(time()-filemtime($fname="$dir/$e")>=$maxlifetime) {
@unlink($fname);
continue;
}
// Нашли не очень старый файл — значит, каталог точно
// не будет в результате работы пуст.
$DelDir=0;
}
closedir($d);
// Если все файлы оказались слишком старые и удалены,
// удалить и каталог
if($DelDir) @rmdir($dir);
return true;
}
// Регистрируем наши новые обработчики
session_set_save_handler(
"ses_open", "ses_close",
"ses_read", "ses_write",
"ses_destroy", "ses_gc"
);
// Для примера подключаемся к группе сессий test
session_name("test");
session_start();
session_register("count");
// Дальше как обычно...
$count=@$count+1;
?>
<body>
<h2>Счетчик</h2>
В текущей сессии работы с браузером Вы открыли эту страницу
<?=$count?> раз(а). Закройте браузер, чтобы обнулить этот счетчик.
</body>[/font]
Зачем это нада, если можна работать со стандартными и не парить себе мозги?
|
|
|
RE: Зачем переопределять обработчики в сессии? - 2007-09-13 18:33:40.876666
|
|
|
Lex_Voodoo
Сообщений: 7328
Оценки: 0
Присоединился: 2004-12-07 13:55:12
|
Стандартные сессии хранятся в файловой системе сервера (session.save_path), и по истечении определённого времени пропадают навсегда. Этот механизм заточен в php и изменить его нельзя. Если всё устраивает - отлично, но если ты, допустим, хочешь хранить сессии в MySQL, то придётся написать свои обработчики.
|
|
|
|
|