Como registrar o tamanho dos cookies no cabeçalho da solicitação com o apache

2

Temos um problema em nosso site com os cookies crescendo muito. Já expandimos o tamanho de cabeçalho aceitável e diminuímos os tamanhos de cookies por enquanto, mas gostaríamos de descobrir quais são os tamanhos de cabeçalho do cliente médio, especificamente dos cookies.

Eu criei um log do apache que captura os cookies que estão sendo definidos em cada solicitação:

LogFormat "%{Cookie}i" cookies

Mas isso apenas expele todo o conteúdo de todos os cookies no cabeçalho.

Existe uma maneira de ter o apache apenas registrando o tamanho (ou apenas o comprimento da string) por solicitação?

    
por chrisst 28.10.2013 / 23:23

2 respostas

1

AFAIK não :(

Mas o que você pode fazer em vez de gravar diretamente em um arquivo de log é usar a capacidade do Apaches de usar um canal e analisar as linhas de log do apache antes de gravá-las no arquivo.

...
LogFormat "%{Cookie}i" cookies
CustomLog "| /usr/local/bin/cookiecutter.awk" cookies

Um exemplo de script awk pode ser o seguinte:

#! /bin/awk -f
# /usr/local/bin/cookiecutter.awk
{
   print length($0) >> "/var/log/apache/cookielength_log"
}

Alguns campos adicionais, como por exemplo a cadeia de identificação do navegador, também podem ser úteis, use sua imaginação.

    
por 29.10.2013 / 10:54
1

Em vez de registrar o tamanho do cookie, você pode registrar o conteúdo dos cookies que estão acima de algum tamanho. Nota: Esta solução requer o apache 2.4.

Digamos que você queira registrar cookies acima de 8190 bytes (que é o valor padrão para LimitRequestFieldSize ), use isso no httpd.conf

# Increase LimitRequestFieldSize so it'll let cookies above 8190 pass
LimitRequestFieldSize 12000

# Set an environment variable if the value of the Cookie header 
# matches a string with more than 8190 characters
SetEnvIfExpr "req('Cookie') =~ /^.{8190,}$/" COOKIE_ABOVE_LIMIT

# Define a log format that logs the cookie contents
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Host}i\" \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\" %{ms}T" log_cookie

# Create a conditional log rule that will log only if the 
# the environment variable is set
CustomLog "/var/log/httpd/cookie_above_limit_log" log_cookie env=COOKIE_ABOVE_LIMIT
    
por 03.07.2017 / 19:37