Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

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

Практика



Для изменения времени жизни сессии Вам потребуется выполнить ряд шагов:

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) Чтобы окончательно проверить - запустите

phpinfo();

?>

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

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

Актуально для: PHP7
создано: 2017-05-09
обновлено: 2020-12-27
16060



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии

Anton
09-11-2019
Спасибо. все понятно

Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)

Термины: Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)