я учусь /usr/lib/php/sessionclean
в данный момент. Я не совсем понимаю одну вещь. Какова цель касаться всех открытых файлов сеанса перед очисткой? Я понимаю, что это предотвращает удаление просроченных сеансов, которые в настоящее время открыты, но еще не записаны. Но разве это не состояние гонки? Что, если процесс PHP открывает файл сеанса с истекшим сроком действия между командами касания и удаления?
Файлы сеанса старше максимального срока жизни на момент find
команда оценивает их, будут удалены.
Файлы обновляются не позднее, чем по завершении выполнения сценария PHP. Однако, возможно, не совсем честно убивать сеанс из-за простоя во время его выполнения. Таким образом touch
обновляет время изменения файлов сеанса, в которых в настоящее время выполняется процесс php.
Да, существует состояние гонки для процесса php, запускаемого после touch
, возобновление слишком старого сеанса и удаление, поскольку оно не было завершено до find
сделал сборку мусора. Сеанс уже существовал в течение всего времени своего существования, вероятно, несколько минут. Отсутствие расширения в доли секунды не имеет большого значения.
Альтернатива, встроенная реализация PHP, имеет примерно 1% шанс запустить сборку мусора при выполнении. Для сайтов с небольшим объемом может срабатывать ненадежно.
Кроме того, внешний сценарий позволяет заблокировать безопасность в каталоге сеанса, поэтому специалисты по сопровождению Debian сделали это именно так.