Пустые сеансы 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()
чтобы убедиться, что о проблемах сообщалось.