LINUX.ORG.RU

Борьба с файлами сессий

 , , ,


2

1

Как правильнее всего избавляться от файлов сессий PHP, которые любят сотнями и тысячами скапливаться в каталоге для временных файлов виртуального хоста, не нарушая нормальную работу сайта? Хочется предотвратить возможные проблемы с нехваткой инодов. Да и само выражение „каталог для временных файлов” не очень сильно соответствует постоянно лежащему в нём мусору.

Складывай в базу.

anonymous
()

Не знаю правильно это или нет, но я в самом конце кода, если sizeof($_SESSION) = 0, то сессию уничтожаю и зазря ненужный файл не висит.

А как быть с файлами сессии, которые не пустые, но уже не нужны тоже не знаю.

Spoofing ★★★★★
()
Ответ на: комментарий от gruy

cron

Спасибо за наводку. Действительно, в /etc/cron.d/php5 есть такое:

# /etc/cron.d/php5: crontab fragment for php5
#  This purges session files older than X, where X is defined in seconds
#  as the largest value of session.gc_maxlifetime from all your php.ini
#  files, or 24 minutes if not defined.  See /usr/lib/php5/maxlifetime

# Look for and purge old sessions every 30 minutes
09,39 *     * * *     root   [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete
Но это почему-то не работает для виртуальных хостов. Как бы его натравить на временные каталоги виртуальных хостов?

wintrolls ☆☆
() автор топика

Добавляем к словам apache и php в списке меток слово redis и слова tmp и мусор становятся в этом списке лишними.

Suntechnic ★★★★★
()

Как правильнее всего избавляться от файлов сессий PHP

очень легко..

достаточно ничего не предпринимать :-D

...ну и ещё (паралельно к ничему не предприниманию) можно помнить о том что существует некий параметр «session.gc_divisor» ( http://www.php.net/manual/en/session.configuration.php#ini.session.gc-divisor )

другими словами — я готов почти поспорить на всё что угодно что у автора НЕ было ни разу такой ситуации что количество файлов сессий стало кретически-большим. :)

user_id_68054 ★★★★★
()

а обычно существует противоположная ситуация:

файлы-сессий удаляюся раньше чем этого хотелосьбы

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

всё проблема в этом дибильном /etc/cron.d/php5 [нафиг он нужен? и без него всё хорошо]

user_id_68054 ★★★★★
()
Ответ на: комментарий от Spoofing

Не знаю правильно это или нет, но я в самом конце кода, если sizeof($_SESSION) = 0, то сессию уничтожаю и зазря ненужный файл не висит.

не правильно

user_id_68054 ★★★★★
()

Вангую у ОП старт сессии, когда она вообще не нужна

goingUp ★★★★★
()

Как правильнее всего избавляться от файлов сессий PHP

Как намекнул предыдущий оператор, ответ: не плодить их без необходимости. А то как не зайдешь на пыхосайт - немедленно тебе печеньку скормит с PHPSESSID, хотя даже не авторизовывался еще.

GateKeeper ★★
()
Ответ на: комментарий от GateKeeper

Как намекнул предыдущий оператор, ответ: не плодить их без необходимости

А если она всё же нужна?

wintrolls ☆☆
() автор топика
Ответ на: комментарий от user_id_68054

я готов почти поспорить на всё что угодно что у автора НЕ было ни разу такой ситуации что количество файлов сессий стало кретически-большим.

Сейчас уже почти 1000 файлов и их количество медленно, но верно растёт.

wintrolls ☆☆
() автор топика
Ответ на: комментарий от wintrolls

хм... похоже что эти настройки расчитанны на использование /etc/cron.d/php5

ну тогда логично

user_id_68054 ★★★★★
()
Ответ на: комментарий от wintrolls

ну а вообще здесь http://www.php.net/manual/en/session.configuration.php#ini.session.gc-probabi... — написанно что

session.gc_probability = 1 (по умолчанию)

и что

session.gc-divisor = 100 (по умолчанию)

а почему в Вашем случае настройки не соответствуют настройкам по умолчанию — вот именно в этом направлении как раз нужно вести расследование

# P.S.: если настройки изменены разработчиками Debian — то значит они это сделали в соответствии с Cron. а если изменены кем-то другим — то надо смотреть кем и зачем...

user_id_68054 ★★★★★
()

Проблема решена. В /etc/cron.d/php5 для каждого из виртуальных хостов прописал

09,39 *     * * *     root   [ -x /usr/lib/php5/maxlifetime ] && [ -d /path_to_vhost/tmp ] && find /path_to_vhost/tmp -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete
где /path_to_vhost/tmp — каталог з сессиями виртуального хоста. Всё работает.

wintrolls ☆☆
() автор топика

которые любят сотнями и тысячами скапливаться в каталоге для временных файлов виртуального хоста

Если так, то в redis их.

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.