Тематические термины: PHP, Веб-сервер, Cookie.
От времени действия сессии зависит период работоспособности PHP-переменных $_SESSION, и как следствие, активности веб-приложений. Например, если пользователь авторизовался в системе, время в течении которого он может бездействовать без необходимости повторного ввода логина и пароля зависит от данного параметра.
Существуют разные способы установки времени жизни сессий. Попробуем разобраться на примере операционной системы Linux.
Перед настройкой, стоит посмотреть текущее состояние. Есть несколько методов это сделать:
Вводим:
php -i | grep session
Получаем список параметров, имеющих отношение к сессиям. Нас интересуют:
Данные значения — значение по умолчанию. cookie_lifetime => 0 говорит о действии файлов куки до закрытия браузера, если задать этому параметру определенное значение, сессия будет прерываться при активном сеансе, поэтому лучше ее оставлять в значении ноль.
<?php
$maxlifetime = ini_get(“session.gc_maxlifetime”);$cookielifetime = ini_get(“session.cookie_lifetime”);
echo $maxlifetime;echo $cookielifetime;
?>
Выполняется путем настройки файла php.ini. Данный способ удобен, если мы являемся администратором веб-сервера, а также если есть гарантия, что общая настройка сессий не повлияет на работоспособность всех веб-приложений, работающих на данном сервере.
Открываем на редактирование php.ini:
vi /etc/php.ini
И редактируем следующие параметры:
session.gc_maxlifetime = 86400session.cookie_lifetime = 0
* где параметр gc_maxlifetime указывает на временя в секундах, после прошествии которого данные могут быть удалены; cookie_lifetime — время жизни файлов cookies; 86400 — 24 часа в секундах.* если параметру gc_maxlifetime задать значение 0, действие сессий будет бесконечным. Это, как правило, не стоит делать — приведет к падению производительности и безопасности сервера.
Путь до php.ini может быть разный в зависимости от программной платформы и набора компонентов. Например, при использовании php-fpm, путь может быть следующий: /etc/php/7.1/fpm/php.ini. Узнать путь можно командой php -i | grep php.ini
После настройки параметров, необходимо перезагрузить сервер, являющийся интерпретатором PHP.
Если это apache:
systemctl restart apache2 || systemctl restart httpd
* в версиях Linux без systemd используем команду service apache2 restart или service httpd restart.
Если используем FastCGI (PHP-FPM):
systemctl restart php-fpm || service php-fpm restart
Данный файл позволяет веб-мастеру управлять некоторыми настройками веб-сервера. Для его редактирования нужен доступ к файлам сайта. Способ не сработает, если в качестве обработчика PHP используется не Apache, а, например, NGINX + PHP-FPM. Хотя, тут тоже есть способ (о нем будет ниже).
В файл .htaccess вносим следующее:
php_value session.gc_maxlifetime 86400php_value session.cookie_lifetime 0
* как можно заметить, параметры те же, что при настройки через php.ini.
Как говорилось выше, метод не сработает, если не используется Apache. Однако настройку можно выполнить на сервере (опять же, у нас должен быть соответствующий доступ).
Открываем файл настройки веб-сервера, например, в php-fpm:
vi /etc/php-fpm.d/www.conf
и редактируем/добавляем:
php_value[session.gc_maxlifetime] = 86400php_value[session.cookie_lifetime] = 0
После перезапускаем сервис:
Способ может быть полезен, когда разные страницы портала должны иметь разное время жизни сессии. Для этого можно воспользоваться PHP-функциями ini_set и session_set_cookie_params, например:
ini_set(‘session.gc_maxlifetime’, 86400);ini_set(‘session.cookie_lifetime’, 0);session_set_cookie_params(0);
session_start();
Функции обязательно вызывать до открытия сесии (session_start).
Некоторые приложения могут переопределять настройки. В таком случае, задать время жизни сессии необходимо в параметрах программы. У каждого приложения свои настройки, в которых необходимо самостоятельно разобраться. Приведем для примера настройку сессии в CMS Битрикс.
Заходим в Группы пользователей – выбираем группу – Безопасность. Находим параметр «Время жизни сессии (минут)» и ставим время, например 1440 (24 часа в минутах).
Если сессия выдается на определенный период и заканчивается в определенное время, это может привести к прерыванию активного сеанса пользователя. Гораздо удобнее, если время действия сессии будет автоматически продлеваться, если посетитель обновляет страницу. Для этого существует параметр cookie_lifetime, который во всех примерах выше мы задавали в значении 0.
Если мы зададим значение cookie_lifetime 86400, то через 24 часа сессия прервется. Это не всегда удобно.
Если есть необходимость в контроле и прерывании сессии, можно воспользоваться php-функцией session_destroy().
Место хранения файлов сессий задается параметром session.save_path также, так время жизни. По умолчанию, может использоваться путь /var/lib/php/sessions.
Это важный параметр — если у веб-сервера будут отсутствовать права на запись в данный каталог, это приведет к невозможности хранить сессии, что вызовет неожиданные результаты работы приложений.
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies