Пустые сеансы LAMP

У меня есть сервер LAMP. Пользователи входят в систему и проходят аутентификацию в базе данных MySQL. После успешной аутентификации, session_start() называется. Ни в коем случае regenerate_session_id() называется. Я испытываю несколько пустых сессий PHP/apache. Примерно каждую секунду создается пустой файл сеанса. В php.ini Я имею:

session.gc_probability = 1
session.gc_divisor = 1
session.gc_maxlifetime = 1440 

Я понимаю, что это не имеет ничего общего с созданием сессии, но настройки для GC. Мы установили его на полный газ, чтобы он обрабатывал все сеансы с истекшим сроком и, надеюсь, очистил все пустые сеансы. Я не знаю, ожидаются ли пустые сессии или это действительно проблема. Меня беспокоит то, что их так много, это увеличивает вероятность успешного угона сессии. Существует дублирующая машина, которая используется для тестирования и разработки, и она не имеет такого поведения. У меня сложилось впечатление, что файл сеанса создается httpd только при аутентификации пользователя, а session_start() называется. Я не знаю, что вызывает пустые файлы сеанса, если это законная проблема, или если кто-то еще испытывал такое поведение.

Делать auditctl Правило смотреть этот каталог, это определенно Apache, создающий их. Который проверяет, поскольку apache является владельцем: группа всех пустых файлов. Эта коробка в настоящее время работает Apache 2.2.15. find . -type f | wc -l показывает количество файлов постоянно увеличивается. Через пару минут я поймал его более чем в 640, и я уверен, что оно ухудшается даже при обработке GC, насколько это возможно.

1 ответ

Это должен быть комментарий - но это немного долго.

Вы не сказали нам, почему это неожиданно, и не предоставили никакого контекста.

  • Вы пытались связать создание сеанса с вашим журналом доступа?
  • Ожидаете ли вы всегда найти какие-то данные в сессии?
  • Вы просматривали свой код, чтобы определить, какие сценарии вызывают session_start() без установки значений?
  • Вы пытались использовать код, чтобы всегда фиксировать некоторые данные?
  • Вы протестировали весь код на своем сайте, чтобы убедиться, что сеансы работают так, как ожидалось, и работает регистрация ошибок?
  • Вы проверили свой журнал ошибок на "заголовки уже отправлены"

Конечно, вы приложили некоторые усилия для расследования? Тем не менее, вы упоминаете только об использовании uditctl, чтобы увидеть появление файлов - должно быть очевидно, что это не сильно поможет в выяснении того, что их вызывает.

Конфигурация, которую вы показали нам, не имеет ничего общего с созданием сеансов. Вы можете начать с небольшого прочтения о том, как работают PHP-сессии.

Подсказка: если вы добавите %{Set-Cookie}o в своем журнале доступа, вы сможете увидеть, какие запросы создают какие сеансы. Если вы добавляете файл с автоподпиской, вам не нужно редактировать каждый файл, но вы можете добавить инструментарий для отправки данных в журнал и / или сам сеанс. Особенности того, как вы этого достигнете, зависят от того, используете ли вы session_start() в каждом скрипте / в определенных деревьях каталогов.

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

Другие вопросы по тегам