Я потратил некоторое время на поиски хорошего ответа на то, как работают настройки сервера php.ini.
сеансы истекают. Я нашел много информации, но потребовалось время, чтобы понять, почему
настройки работают так, как они. Если вы похожи на меня, это может быть полезно для вас:
Сеансы хранятся в виде файлов cookie (файлы на компьютере клиента) или на стороне сервера в виде файлов.
на сервере. Оба метода имеют свои преимущества и недостатки.
Для сеансов, хранящихся на сервере, используются три переменные.
session.gc_probability
session.gc_divisor
session.gc_maxlifetime
(session.gc_probability / session.gc_divisor) создает вероятность того, что
будет запущена программа сбора мусора. Когда работает сборщик мусора, он
проверяет файлы сеансов, которые не были доступны по крайней мере для session.gc_maxlifetime
и удаляет их.
Это все довольно хорошо объясняется в сообщениях на форуме (особенно это!) - Но
возникают следующие вопросы:
1.) Как применяется эта вероятность? Когда сервер бросает кости?
A: Сервер бросает кости каждый раз, когда session_start () вызывается во время
любой активный сеанс на сервере. Так что это означает, что вы должны увидеть мусор
сборщик запускается примерно один раз за каждые 100 раз, когда вызывается session_start ()
если у вас есть значение по умолчанию session.gc_probability = 1 и session.gc_divisor = 100
2.) Что происходит на серверах с низким уровнем громкости?
A: Когда session_start () вызывается, FIRST обновляет сеанс и делает
значения сеанса доступны для вас. Это обновляет время в вашем файле сеанса на
сервер. Затем он бросает кости и, если он выигрывает (1 из 100 шансов), вызывает коллектор мусора. Затем сборщик мусора проверяет все файлы идентификаторов сеансов и проверяет, есть ли
любой, имеющий право на удаление.
Так что это означает, что если вы единственный человек на сервере, ваш сеанс будет
никогда не выключаться, и это будет выглядеть, как будто изменение настроек не имеет
эффект. Допустим, вы измените session.gc_maxlifetime на 10 и session.gc_probability
до 100. Это означает, что есть 100% шанс, что сборщик мусора запустится и
удалит все файлы сессий, которые не были доступны в течение последних 10 секунд.
Если вы единственный на сервере, ваша сессия не будет удалена. Тебе нужно
по крайней мере, 1 другой активный сеанс запущен, чтобы ваш стал неактивным.
Так что, в основном, на маломощном сервере или во время малой громкости - это может быть МНОГО
дольше, чем session.gc_maxlifetime, прежде чем сборщик мусора будет работать и
сеансы фактически удаляются. И не зная, как это работает, это может
кажутся вам совершенно случайными.
3.) Почему они используют вероятность?
A: Производительность. На сервере с большим объемом вам не нужен сборщик мусора
работает на каждый запрос session_start (). Это замедлит работу сервера
без необходимости. Таким образом, в зависимости от объема вашего сервера, вы можете увеличить
или уменьшите вероятность запуска сборщика мусора.
Я надеюсь, что это связывает вещи для вас. Если вы похожи на меня, и вы пытались
session.gc_maxlifetime, и это не сработало (потому что вы пробовали
на сервере разработки, чтобы никого не беспокоить), тогда этот пост
надеюсь, избавил вас от царапин на голове.
Удачи!