Почему PHP игнорирует session.gc_maxlifetime?
У нас есть сервер на основе WAMP. php.ini
настроен со следующим:
session.gc_maxlifetime = 60*60*12
session.save_path = "d:/wamp/tmp"
Проблема, с которой мы сталкиваемся, заключается в том, что файлы сеансов внутри tmp
папка время от времени удаляется, и мы не можем сказать, почему. Сессии будут длиться от 10 минут до 40 минут, тогда как они должны длиться 12 часов.
Это среда виртуального хоста, но ни один из кода, который мы используем на этих сайтах, не переопределяет этот параметр (с ini_set
, apache config значения PHP или другие), поэтому мы не можем видеть, почему они удаляются. Также нет запланированных задач по удалению файлов.
Есть ли способ успешно выяснить, почему gc_maxlifetime игнорируется? Для записи я поменял один из наших сайтов на использование session_save_path('D:/wamp/tmptmp');
временно, просто чтобы дважды проверить, что это была сборка мусора, и файлы сеанса остаются там нетронутыми - хотя по общему признанию это не дает действительно много дополнительных подсказок.
2 ответа
Столкнулся с той же проблемой при попытке кластеризации определенного проекта.
Я обнаружил, что проблема была вызвана:
/**
session_regenerate_id(true);
**/
Попробуйте удалить его из своего кода или установите для аргумента значение false.
Конфигурация session.gc_maxlifetime будет определять, как долго данные будут считаться мусором. По истечении этого времени данные сеанса могут быть удалены при возникновении "сборки мусора". Но это не исключает возможности удаления ваших сеансовых переменных по какой-то другой причине.
Проверьте ответ Гамбо здесь, где он / она говорит: "Лучшее решение - установить тайм-аут сессии самостоятельно".