В конфигурации журнала Apache возможно указать, что имя пользователя автора HTTP должно быть зарегистрировано. Большинство Сценариев PHP имеет свою собственную, основанную на cookie аутентификацию. Действительно ли возможно в PHP предоставить Apache имя пользователя автора HTTP для входа целей, даже если аутентификация основана на cookie? Если бы да, как код был бы похож? В противном случае, что такое альтернативы?
Можно хранить имена пользователей и идентификаторы прошлых сессий в другом месте, а в журнал записывать значения куки (обычно %{PHPSESSID}C
), которые потом можно отследить.
Другой вариант - отправить заголовок с именем пользователя обратно клиенту, желательно сразу после session_start
:
PHP:
header('X-Php-Sess-User: '.$username);
Customlog:
%{X-Php-Sess-User}o
Если не использовать обработчик Apache для обращения к внутренним структурам данных auth*, то лучше всего прибегнуть к переменным окружения. Вы можете установить переменную окружения верхнего уровня с помощью apache_setenv в вашем PHP-коде
apache_setenv('USERID','jrodriguez',true);
и затем записать значение в файл журнала с помощью записи LogFormat в конфигурации Apache, используя "%{USERID}e" вместо "%u"
LogFormat "%v:%p %h %l %{USERID}e %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" envuid_combined
CustomLog /path/to/access.log envuid_combined
Конечно, реальные учетные данные при выполнении фактического HTTP-аута будут потеряны навсегда, поэтому подумайте о сохранении %u где-нибудь еще - либо в новом поле, либо в параллельном файле журнала.