Некоторые особенности работы с сессиями

Сюрприз #1. В Debian Linux отключен контроль PHP за удалением сессий. Разработчики почему-то решили, что эту задачу надо решать с помощью cron, а создатели ISP Manager этого не учли, т.е. в стандартной конфигурации подобного задания нет. Лечится это элементарно — установкой session.gc_probability = 1 в php.ini с последующим рестартом Apache. Не проделав этого легко получить переполнение файловой системы (а вернее — inodes).

Сюрприз #2. Продление времени жизни сессии определенного сайта оказалось нетривиальной задачей. Можно попытаться задать его в php-скрипте:
$expiry = 60*60*24*30; // 30 дней храним сессию
ini_set('session.gc_maxlifetime', $expiry); // количество секунд, после чего данные будут считаться 'мусором' и зачищаться
ini_set('session.cookie_lifetime', $expiry); // период хранения куки в секундах

Но тут выясняется, что если сессии сохраняются в стандартной директории, то у сборщика мусора PHP с установками, рассчитанными на меньшее время хранение, более высокий приоритет, и он все равно удалит все файлы, которые сочтет устаревшими. Так что эти установки без переопределения параметра session.save_path (директории, куда будут записываться сессии) бессмысленны. А в этом случае нужно еще озаботиться написанием собственной процедуры удаления устаревших сессий, которую будет запускать крон. Так что самым простым и действенным методом является увеличение параметра session.gc_maxlifetime для сборщика мусора в php.ini, который, увы, будет распространяться на все сайты данного веб-сервера.