Собственный сборщик мусора в сессиях

Роберт

Аналитик
Собственный сборщик мусора в сессиях

Можно ли создать какие-то собственные функции которые выполняются вместе с уничтожениием сессий (чтобы можно было бы удалить файлы , которые закачивались пользователем)?
Конечно можно создать собственны session_set_save_handler. Но тогда придётся создавать весь алгоритм создания/чтения/удаления сессий. А мне хотелось только дописать что-то выполняющееся вместе с GC.
И даже если писать своё то в самом важном мечте в описании написано:
PHP:
/*********************************************
 * WARNING - You will need to implement some *
 * sort of garbage collection routine here.  *
 *********************************************/
function gc($maxlifetime) 
{
  return true;
}
Может кто-то подсказать какие-то образцы реализованных сборщиков мусора?
 

Фанат

oncle terrible
Команда форума
Но тогда придётся создавать весь алгоритм создания/чтения/удаления сессий.
придется.
иначе никак.
И даже если писать своё то в самом важном мечте в описании написано:
* WARNING - You will need to implement some *
* sort of garbage collection routine here. *
А что бы ты хотел, чтобы там было написано?
Откуда автор мануала может знать, каким образом у тебя хранятся сессии, чтобы написать тебе, как их удалять?
Может кто-то подсказать какие-то образцы реализованных сборщиков мусора?
может
db("DELETE FROM sessions WHERE activity <".(time()-$timeout));
 

Роберт

Аналитик
Фанат
Как это откуда автор мануала знает как у меня хранятся сессии? Ведь там весь пример по этой самой собсвенной реализации и дан! Вот только самую главную вункцию "Сборщик мусора" там и не описана :(
И конечно я имел в виду реализацию сессий без использования баз данных.
 

neko

tеam neko
можно поинтересоваться тогда,
с использованием чего и зачем?
 

Фанат

oncle terrible
Команда форума
neko, а кстати, не знаешь, где там реализуется touch?
ведь read никак не оставляет время своего доступа?
 

neko

tеam neko
оставляет, last access time
при условии что для диска вообще включенно это поле
 

Фанат

oncle terrible
Команда форума
хммм.
а чтение файла на предмет получения last acces не меняет это поле?
да и под виндой оно не работает вовсе...
 

neko

tеam neko
работает
afaik у тебя фар?
сtrl+a
f3 f3
ctrl+a

-~{}~ 07.03.05 14:29:

> а чтение файла на предмет получения last acces не меняет это
> поле?

чтение файла это fopen/fread/fclose

а получение la, это stat
 

Фанат

oncle terrible
Команда форума
о блин я тормоз! изо всех дисков выбрал единственный с фатом :)
понятно, то есть на большинстве систем достаточно просто читать.
однако стандартный механизм рботает и на фате тоже, если я не ошибаюсь?
в общем, тач в read добавить не помешает?
 

neko

tеam neko
afaict стандартный механизм проверяет время последней модификации файла (mtime)
т.е. время записи

работает ли это на фате, мне неизвестно
если честно сомневаюсь
 

Роберт

Аналитик
neko
Я хотел без использования баз данных чтобы не ставить MySQL только ради сессий.
А идея простая (как в почте) пользователь закачивает несколько файлов (имена уже закаченных храню в сессии и пользователь может ещё дозакачивать их) , и если в конце нажимает ОТПРАВИТЬ - все закаченные файлы будут мною обработаны. Но пользователь может просто уйти в любой момент времени и тогда файлы останутся мёртвым грузом. Вот и хотел дописать что-то чтобы удаляло вместе с сессиями. Тоесть меня полностью устраивает стандартная реализация но вот как-нибудь туда ещё свою функцию добавить...
 

neko

tеam neko
а ты сделай сборщик мусора не для сессий, а для закаченных файлов ;-)
 

Роберт

Аналитик
neko
Ну так их можно удалять только после того как удаляется сессия!
По этому я и хотел что-то дописать к сборщику чтобы он удалял бы их вместе с сессиями , но Фанат сказал что это нельзя и что надо писать свой сборщик.
 

Gas

может по одной?
Роберт
не думаю что произойдёт нечто страшное, если удалишь через день после того, как сессия умрёт.
 

neko

tеam neko
ну фанат сказал в общем-то правильно
хотя помоему это прокол, что нельзя подвесить ничего дополнительно на момент удаления

самое простое что ты можешь сделать, это удалять время от времени файлы исходя из времени их создание
собственно как и сказали, через день, например

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

Роберт

Аналитик
Gas
Именно так я сейчас и деляю (директория создана больше 12 часов назад и не отослана мне на обработку - я её удаляю). Просто очень хотелось увидеть хоть один работающий пример из наработак пользователей (кроме тех что в php.net)

-~{}~ 07.03.05 14:43:

neko
Я правильно тебя понял - Созадать список дирикторий с закачками (они у меня с такими же номерами что и у сессии) и потом просмотреть - какие из этих сессий уже удалены? Но тогда мне надо просматривать /temp
Я в предыдущей теме спрашивал у народа - как можно получить список активных сессий , но мне посоветовали лишь glob который не работает в save_mode
 

neko

tеam neko
это что, в safe_mode уже список файлов в /tmp получить нельзя?
 

Роберт

Аналитик
neko
Конечно можно , но я получу список файлове не только своих , но и других сессий работающ на этом же сервере под другими доменами.
А вообще интересно - если я вижу другие сесси и все они от имени apache созданы , то значит я их и удчалить через РНР могу?
 
Сверху