Почему Debian очищает php-сессии с помощью задания cron вместо использования встроенного сборщика мусора в php?

Debian и производные (Ubuntu) не используют сборщик мусора в php-сессии

session.gc_probability = 0

вместо этого они используют cron /etc/cron.d/php5

09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete

Почему Debian решил сделать это?

2 ответа

Решение

Потому что Debian устанавливает очень строгие разрешения на /var/lib/php5 (1733, владелец root, root группы) для предотвращения перехвата сессии PHP. К сожалению, это также препятствует работе нативного сборщика мусора сеанса PHP, потому что он не может видеть там файлы сеанса. Задание cron запускается от имени пользователя root, который имеет достаточный доступ для просмотра и очистки файлов сеанса.

Изменить: Вспомогательная документация: Поведение было установлено в ответ на ошибку # 267720. (Раньше были комментарии на складе php.ini Файл об этом, но я не вижу их там сейчас в моей установке PHP на основе wheezy.)

Вероятно, он будет немного более надежным на сайтах с низким трафиком (если вы получаете только пару сотен обращений в день, а GC запускает каждую тысячу или около того, сеансы могут длиться дольше, чем следовало бы), и я думаю, что это может быть немного менее суровым на сервере, чем родной GC, если у вас много сеансов.

Другие вопросы по тегам