O seguinte é um trecho de código PHP que eu escrevi que define um cookie com um valor aleatório, sobrescrevendo o cookie se ele já estiver definido. Você pode anexá-lo ao início (ou fim) de cada página que você gostaria de contar como uma visita individual (que lhe dá uma extensão .php
).
<?php
/*
* generateRandomString() is used to generate the ID, taken from
* https://stackoverflow.com/questions/4356289/php-random-string-generator/4356295#4356295
*/
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
// Will generate an ID 12 characters long.
setcookie("visit", generateRandomString(12));
?>
Em seguida, insira %{visit}C
na entrada LogFormat
no lugar do ID que mod_unique_id
estava gerando. Isso funciona configurando um cookie com o ID toda vez que um cliente visita uma página real, e esse cookie aparecerá no log no lugar de %{visit}C
a cada visita. Quando eu estava escrevendo esta resposta, eu usaria uma variável de sessão do PHP , mas não consegui descobrir uma maneira de incluir isso em um arquivo de log do Apache.
Esta é uma solução mais simples que escrevi antes de criar o script PHP e não queria excluir. Esta solução não responde à sua pergunta com a mesma precisão que a outra, mas você (ou outra pessoa que leia isso) ainda pode achá-la útil.
Você pode registrar as solicitações de recursos em outro log, para que o log principal tenha apenas visitas de páginas (e robôs). O código a seguir verifica se o URL simplesmente contém .css
ou .jpg
(adicione ou remova suas próprias extensões conforme necessário) na seção VirtualHost da configuração do site:
SetEnvIf Request_URI /.css/ assets
SetEnvIf Request_URI /.jpg/ assets
Para gravar "visitas", anexe env=!assets
ao seu CustomLog
entry: CustomLog /path/to/visit/log <logformat identifier> env=!assets
Para gravar recursos, conforme indicado pela lista: CustomLog /path/to/asset/log <logformat identifier> env=assets