Dans la configuration du journal Apache, il est possible de spécifier que le nom d'utilisateur d'authentification HTTP doit être enregistré. La plupart des scripts PHP ont leur propre authentification basée sur les cookies. Est-il possible en PHP de fournir à Apache un nom d'utilisateur HTTP à des fins de journalisation, même si l'authentification est basée sur un cookie? Si oui, à quoi ressemblerait le code? Si non, quelles sont les alternatives?Mettre le nom d'utilisateur dans apache access_log avec PHP et sans authentification HTTP
Répondre
Apache transmet les données entre les modules en note. Si vous exécutez PHP en tant que module Apache, vous pouvez utiliser apache_note()
pour obtenir et définir des notes. Vous pouvez ensuite inclure the %{note_name}n
log format string pour l'écrire dans le journal d'accès. Cela ne "fuira" aucune donnée au client.
En PHP:
apache_note('username', $username);
Dans la configuration de votre serveur:
LogFormat "%h %l %{username}n %t \"%r\" %>s %b" common_with_php_username
CustomLog logs/access_log common_with_php_username
Il est possible de stocker les noms d'utilisateur & après session_ids ailleurs et de laisser le journal y écrire les valeurs de cookie (généralement %{PHPSESSID}C
), que vous pouvez ensuite retracer.
Une autre option serait d'envoyer un en-tête avec le nom d'utilisateur au client, de préférence juste après votre session_start
:
PHP:
header('X-Php-Sess-User: '.$username);
CustomLog:
%{X-Php-Sess-User}o
Court de en utilisant un gestionnaire Apache pour toucher les structures de données auth * internes, le mieux est de recourir à des variables d'environnement. Vous définissez une variable d'environnement de haut niveau à l'aide apache_setenv dans votre code PHP
apache_setenv('USERID','jrodriguez',true);
puis écrire la valeur dans le fichier journal avec une entrée LogFormat dans votre configuration d'Apache en utilisant « % {USERID} e » au lieu de " % 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
Bien sûr, les véritables lettres de créance lors de l'exécution auth réelle HTTP serait perdu pour toujours, alors pensez à économiser% u quelque part ailleurs - soit dans un nouveau domaine ou dans un fichier journal parallèle.
ne serait pas une variable d'environnement globale et en tant que telle ne pas être fiable –
@Esben Vous ne savez pas exactement ce que vous voulez dire, mais en général, non - une variable envorioment n'est pas globale. La solution ci-dessus fonctionne parfaitement pour moi. – rjmunro
Depuis Apache 2.4.7 Apache vous permet de copier une-tête de réponse à une note. Donc, si vous n'exécutez pas PHP en tant que module Apache (mais utilisez par exemple PHP-FPM), vous ne voulez pas non plus que la valeur du journal soit envoyée au client (ce qui arrive généralement si vous le définissez dans un -tête de réponse), voici une façon de le faire:
php:
header('X-Username: '.$username);
httpd.conf:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{username}n\"" logfmtname
vhost.conf:
CustomLog logs/vhost-access_log logfmtname
# copy response-header value to note
Header note X-Username username
# unset response-header so client won't get it
Header unset X-Username
- 1. Http authentification avec apache httpcomponents
- 2. authentification HTTP et l'authentification PHP
- 3. Authentification de base Apache http?
- 4. Authentification HTTP avec le client Zend XML RPC de PHP
- 5. TouchJSON avec authentification HTTP de base
- 6. bot pywikipedia avec authentification https et http
- 7. authentification http de base avec django-piston
- 8. Authentification proxy inverse Apache via PHP
- 9. Qt Authentification HTTP avec QNetworkAccessManager
- 10. Authentification HTTP avec références Web
- 11. réinitialiser http-auth avec php
- 12. Authentification Gitweb avec Gitose sans authentification LDAP?
- 13. Authentification SOAP avec PHP
- 14. Http poste à asmx avec le paramètre sans nom
- 15. NTLMv2 authentification HTTP Java
- 16. Apache htdocs dans le dossier avec le nom unicode
- 17. Connecteur http pour le serveur http Restlet et Apache
- 18. Authentification HTTP de base avec Obj C et Xcode
- 19. comment faire une authentification en un seul point avec php, apache et LDAP
- 20. authentification HTTP et FileSend en C
- 21. authentification HTTP de base
- 22. Connexion/authentification WebDav avec PHP
- 23. IIS7 Authentification http simple
- 24. Comment inclure le nom du serveur dans le nom de fichier d'un journal apache?
- 25. sftp avec authentification mutuelle utilisant apache vfs
- 26. Authentification Blackberry MD5 avec HTTP Post
- 27. Facebook Connect et authentification de base HTTP
- 28. Authentification de base HTTP dans JBoss 4?
- 29. Authentification Twitter sans autorisation
- 30. Rails s'exécutant sur WEBrick avec authentification HTTP
I ne pense pas que c'est une bonne idée. Pourquoi ne pas utiliser un fichier journal séparé? –
Parce que je voudrais faire des statistiques simples avec un outil comme AWStats. – chiborg