|
|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Pavel Ammosov 2:5020/52 15 Jun 2001 15:35:20 To : Igor Mikhailov Subject : Re: как удалять старые сессии в Apache::Session? -------------------------------------------------------------------------------- IM>Linux login: Pavel IM>password: :-P IM>>> Использую для сессий Apache::Session, в частности IM>>> Apache::Session::MySQL и Apache::Session::File. mod_perl'ом IM>>> не пользуюсь, пишу только под CGI. Вопрос: как удалять IM>>> старые сессии? Timestamp то я в них кладу, но как получить IM>>> итератор по идентификаторам сессий, чтоб по всем пройтись IM>>> и удалить дохлые? Hе напрямую же в БД или файлы ломиться. PA>> Хехе. Это самая большая фигня в Apache::Session. "Официальный" метод PA>> -- субклассировать A:S и вставлять информацию об последнем обновлении PA>> самому. PA>> Hеофициальный -- завести в таблице с сессиями поле timestamp: PA>> и удалять базируясь на нем. IM>А если происходит только чтение? Я не пробовал и доки от mysql у меня нет под рукой, может он и при чтении timestamp обновляет? IM> Или каждый раз при чтении update'ить строку? :( Hу, если ты используешь CGI, время на UPDATE одной строки врят ли будет самым большим тормозом в твоей системе :-) PA>> Старые данные Apache::Session::File у меня удаляет tmpreaper(8). IM>По времени доступа к файлу? Ага. IM>Тут сразу есть проблема - возникает IM>зависимость кода от способа хранения сессий. :( IM>Вообще говоря хочется что то такое: IM>1) у меня уже есть возможность удалять сессию, id которой я знаю IM> tied(%s)->delete; IM>2) я в каждую сессию при доступе кладу $s{time}=time; IM>3) для того, чтоб удалить старые сессии мне нужно только их _перебрать IM> все_. но заниматься угадыванием идентификаторов - жизни не хватит. IM>4) следовательно нужен интерфейс дающий возможность пройтись по всем IM> сессиям - итераторы. Hу, грязным хаком можно просто выгрести select id from session или прочитать каталог для A::S::File :) IM>Типа: IM>$session=tied(%s)->first_id; IM>do { IM> my %s; IM> tie %s, 'Apache::Session::MySQL', $session, $params; IM> tied(%s)->delete if $s{time}+60*20<time; IM>} while($session=tied(%s)->next_id); Интерфейс странный весьма, на perl непохожий :) Мне бы так больше понравилось: foreach $s (tied(%s)->session_list) { ... } -- /"\ \ / ASCII ribbon campain X against HTML mail and news / \ --- FIDOGATE 4.4.0-snp10 * Origin: Zenon N.S.P. news server (2:5020/52.0) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/2848987f367bf.html, оценка из 5, голосов 10
|