Как изменить время жизни сессии PHP




14985
Как изменить время жизни сессии PHP
Рейтинг 8.69 из 10. Голосов: 37
Ваша оценка:
Для изменения времени жизни сессии Вам потребуется выполнить ряд шагов:

1) Такова уж структура PHP, что для изменения времени жизни сессии Вам придется создать для этих сессии отдельную директорию. Например, Вы хотите, чтобы на всем сайте время жизни было одним. Тогда внутри этого сайта создайте каталог для сессий, где они будут храниться.

Дело в том, что по-умолчанию интерпретатор PHP использует один и тот же каталог для хранения сессий всех сайтов. Из-за этого, если у одного сайта время жизни установлено меньшее, чем у других, скрипт "мусоросборщика" этого "маложивущего" сайта будет подчищать не только свои, но и все файлы сессий, время последнего обновления которых не менялось дольше, чем время жизни сессии этого конкретного сайта. Так, если мы имеем 3 сайта с временем жизни сессий, соответственно, 30, 60 и 120 минут, то время жизни сессии для ВСЕХ сайтов будет равно 30 минутам. Так работает мусоросборщик - он не различает - сессия это этого сайта или чужого.

Например, у нас есть сайт, который лежит по адресу /www/mysite.ru.

Давайте создадим внутри него каталог для сессий
# cd /www/site.com
# mkdir sessions
# chown www-data:www-data sessions
# chmod 700 sessions

Здесь вместо www-data используйте имя пользователя и пароль, под которыми работает Apache (узнать их можно в конфиге апача, или из вывода команды ps).

Каталог, который мы создали, доступен для записи и чтения только для пользователя веб-сервера, что исключает его неправомерное использование из-вне.


2) В файлах PHP, перед session_start(), необходимо вставить следующие строчки:

ini_set('session.gc_maxlifetime', 86400);
ini_set('session.cookie_lifetime', 86400);
ini_set('session.save_path', $_SERVER['DOCUMENT_ROOT'] .'/sessions');

Здесь 86400 - это время жизни сессии в секундах.

Почему через PHP, а не через "php_value" в .htaccess? Потому что нам здесь удобно использовать переменную $_SERVER['DOCUMENT_ROOT'], не привязываясь, таким образом, к конкретной директории относительно файловой системы сервера.

Первую и вторую строчки можно написать в .htaccess, однако я не вижу смысла раскидывать их в два разных файла.


3) Сборщик мусора - это скрипт, который запускается с некоторой вероятностью при открытии страницы. Дело в том, что запускается он не со 100% вероятностью, дабы снизить нагрузку на сервер. По-умолчанию - это 1%. Таким образом, только в 1% случаев при открытии страницы будет проверяться валидность сессии (т.е. "не истекла ли она").

Вас наверняка такая низкая частота не устраивает. Поэтому давайте поменяем этот параметр. За вероятность проверки сессий при открытии страницы отвечает следующий параметр:

ini_set('session.gc_probability', '100');


session.gc_probability может принимать значения от 1 до 100 - соответственно, от 1% до 100%. Если Вы установите 100 - сборщик мусора будет запускаться всегда, при открытии каждой страницы пользователями. Это повысит нагрузку на сервер, но таким образом Вы гарантируете, что дольше указанного Вами времени жизни сессия не проживет.

Установка этого ключа - дело анализа и расчета. Если поситителей на сайте очень много, то значения выше 30% не толко будут создавать излишнюю нагрузку, но и не будут нести пользы - ведь считаются открытия страницы не данной конкретной сессии, а вообще все открытия страниц. Если на сайт заходят несколько человек (например, какой-то внутренний сайт компании), то можно вероятность ставить и побольше.

 

4) Чтобы окончательно проверить - запустите 

<?php // Показать всю информацию, по умолчанию INFO_ALL

   

  phpinfo();

?>

и посмотрите изменилось ли время

 

 

Актуально для: PHP7  
 

Вопросы и ответы

нн
2019-11-09 13:19:08
Спасибо. все понятно

Оставить комментарий

ответить