PHP Продление времени жизни сессии. Почему сессии теряются?

В одном из проектов понадобилось использовать сессии, при этом чтобы время жизни этих сессий было около месяца. Вот только не всё так сразу заработало, как хотелось бы. После переназначения session.gc_maxlifetime и session.cookie_lifetime сессии пропадали по прошествии стандартных 30 минут…

Под катом решение проблемы…

В одном из проектов понадобилось использовать сессии, при этом чтобы время жизни этих сессий было около месяца. Первым делом я переназначил директиву session.gc_maxlifetime и заодно session.cookie_lifetime с помощью функции ini_set. Причем это необходимо сделать до вызова session_start(), иначе работать не будет из-за уже отправленных заголовков браузеру. Вот что у меня получилось в итоге:

ini_set(‘session.gc_maxlifetime’, 2592000);
ini_set(‘session.cookie_lifetime’, 2592000);
session_start();

— 2592000 – количество секунд в месяце (30 дней).
— session.gc_maxlifetime — количество секунд, после чего данные будут считаться ‘мусором’ и зачищаться.
— session.cookie_lifetime — период хранения куки в секундах. Если 0 – значит кука будет хранится, пока браузер не будет закрыт.

Этот код НЕ РАБОТАЛ – все сессии терялись после стандартных 30 минут. Как оказалось, для того, чтобы мы могли установить специфические параметры времени жизни сессии для определённого скрипта, нам необходимо было изменить директиву session.save_path.

В чем же тут проблема? Да в том, что все сессии хранятся по умолчанию в одной папке — /tmp. При запуске другого скрипта на сервере, со стандартным временем жизни сессии, запускается также сборщик мусора, который все «старые», по его меркам, сессии из папки удаляет.

Поэтому я указал другую папку. Вот как мой код выглядел в итоге:

ini_set(‘session.gc_maxlifetime’, 2592000);
ini_set(‘session.cookie_lifetime’, 2592000);
ini_set(‘session.save_path’, LIB_PATH.’\sessions’);
session_start();

Папку с сессиями желательно размещать вне зоны сайта или в папке с сессиями создать файлик .htaccess с фразой в нутрии — Deny from all.

РубрикиPHP

Добавить комментарий