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

Fallen

Новичок
Обработчик сессий gc

Написал простейший обработчик gc:

function gc ($maxlifetime) {
$file='file.txt';
@unlink($file);
return true;
}

всё работает.
Теперь мне нужно удалить файл, имя которого записано как переменная в отмирающей сессии. Как мне обратиться к этой переменной внутри функции-обработчика?
 

Fallen

Новичок
В мануале про session_decode и session_encode написано по два предложения, без всяких примеров, и я чего-то догнать не могу как это всё работает!
 

Fallen

Новичок
session_set_save_handler - это всё понятно, проблема в том, что в сессии записана переменная, например $_SESSION['user']="user_name", как мне эту переменную 'user' получить в функциях, которые я определяю для session_set_save_handler?
 

Fallen

Новичок
По идее $_SESSION['user'] возвращает переменную user текущей сессий, но ведь у нас получается, что функция gc вызывается до инициации новой сессии session_start
 

SiMM

Новичок
> функция gc вызывается до инициации новой сессии session_start
Так ты вызови open перед удалением файла и сессии - а имя файла сессии ты определяешь исключительно сам.
 

Fallen

Новичок
Блин, народ, не догоняю... Можете привести пример кода, плиз?
 

Нечто

Психолог РНРClub
PHP:
function ses_open() {}
function ses_close() {}
function ses_read() {}
function ses_write() {}

function ses_destroy() {
      // тут удаляем файл
      // (юзер вышел) 
}
function ses_gc() {
      // тут тоже удаляем
      // (по таймауту)
}

session_set_save_handler("ses_open","ses_close","ses_read","ses_write","ses_destroy","ses_gc");
 

Fallen

Новичок
Саму структуру я так и делаю... Мне нужен именно сам пример, как УДАЛИТЬ файл, путь к которому записан в _SESSION['file']
 

Нечто

Психолог РНРClub
Хм. В destroy передается SID, а в gc - lifetime. Достаточно именовать файлы с использованием SID и пробегаться по filemtime в gc.
 

Fallen

Новичок
Автор оригинала: Нечто
Хм. В destroy передается SID, а в gc - lifetime. Достаточно именовать файлы с использованием SID и пробегаться по filemtime в gc.
Можешь кусок скрипта привести? Плиз!
 

MiRacLe

просто Чудо
Fallen

[m]session_decode[/m] в UCN от luc at lucje dot removethisforspamplease dot nl прекрасно подходящий тебе вариант (функция unserializesession)

примерно так
PHP:
$data = unserialize(file_get_contents('file_with_session_data'));
if (isset($data['file']) && file_exists($data['file']) && is_writable($data['file']))
   unlink($data['file']);
p.s. если ты конечно используешь сериализацию при сохранении сессии

Нечто
Ты не воткнул что нужно автору топика
 

MiRacLe

просто Чудо
большое пожалуйста ;o)

добавил проверку на существование и "писаемость" файла см. выше
 

Fallen

Новичок
Блин, делаю так:

function gc ($maxlifetime) {
global $sess_save_path, $sess_session_name, $id;

$sess_file = "$sess_save_path/sess_$id";
$data = unserialize(file_get_contents($sess_file));
if (isset($data['file']))
unlink($data['file']);

}

Нифига не работает, я наверное жутко торможу?:(
 
Сверху