Назад | Перейти на главную страницу

Почему 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 выбрал именно это?

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

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

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