Contar sem cookie
Um contador de visitas tem uma tarefa incómoda: tem de distinguir duas visitas uma da outra. Se não conseguir, uma pessoa que recarrega uma página dez vezes parece dez pessoas, e o número no site é ficção.
A solução habitual é um cookie. Este site não usa nenhum. Eis o que faz em vez disso, e porque é que a versão honesta desta frase deu algum trabalho a conquistar.
O cookie que ninguém pediu
Até este ano, cada pedido ao contador iniciava uma sessão PHP. É uma linha de código, parece inofensiva, e significava que todos os visitantes de todos os sites que usam um contador Stats4U recebiam um cookie de sessão — definido por nós, em páginas alheias, sem que nenhuma das partes tivesse essa intenção.
A sessão nunca foi usada para nada. A prova era fácil de encontrar assim que alguém olhasse: a pasta onde as sessões são guardadas continha zero ficheiros. Andava a definir um cookie nos sites de outras pessoas, durante anos, para guardar dados que nunca foram escritos nem lidos.
Já desapareceu do caminho de contagem. Uma sessão só é agora iniciada quando alguém cria ou reconfigura um contador — uma ação tomada deliberadamente, neste site.
O que o substituiu
Os visitantes são distinguidos por um hash. Entram cinco elementos:
- o endereço IP
- o user agent
- o ID do contador
- a data de hoje
- um segredo que muda todos os dias
O resultado são 16 bytes, que é o que fica guardado. É mantido durante dois dias e depois eliminado. O próprio endereço IP nunca é registado em momento algum.
Duas visitas da mesma pessoa, no mesmo dia, ao mesmo contador produzem os mesmos 16 bytes, pelo que a segunda é reconhecida como uma repetição. Amanhã a mesma pessoa produz algo completamente diferente, porque tanto a data como o segredo mudaram. Este é todo o mecanismo.
Porque é que o segredo muda
Esta é a parte fácil de fazer mal, e esteve mal aqui até este ano.
A versão antiga usava um único segredo permanente. Isso continuava a produzir hashes diferentes para pessoas diferentes, o que parece bem. Mas significava que quem possuísse esse segredo podia pegar num endereço IP suspeito e recalcular o seu hash para qualquer dia do arquivo — transformando uma tabela de valores anónimos de 16 bytes de volta num registo de quem visitou o quê, tão longe no tempo quanto os dados existissem.
O segredo muda agora diariamente e os antigos são eliminados ao fim de dois dias. Depois disso, o cálculo deixa de poder ser feito, por ninguém. Isso inclui quem quer que administre este site, e é esse o objetivo: uma proteção que depende da boa conduta do operador não é uma proteção, é uma promessa.
A resolução do ecrã, e uma lição sobre eliminar coisas
A resolução do ecrã costumava ser recolhida. É um sinal clássico de fingerprinting e não valia o que custava, por isso foi retirada do script que corre na página.
Isso não foi suficiente, e vale a pena saber porquê para quem constrói seja o que for para sites de outras pessoas. O script é servido com um tempo de vida de cache de sete dias, pelo que as cópias antigas continuaram ativas nos navegadores dos visitantes durante uma semana depois da alteração. Pior: alguns sites não têm sequer uma ligação ao script — colaram uma cópia dele nas suas próprias páginas há anos, e essa cópia vai continuar a fazer exatamente o que fazia no dia em que foi colada, para sempre.
Por isso a resolução continuou a chegar. A correção foi fazer com que o servidor recusasse o valor, independentemente de quem o enviasse. Remover uma recolha de dados do cliente só impede os clientes novos. Removê-la do servidor impede-a de imediato.
Uma verificação independente
Nada disto vale muito como afirmação, por isso aqui está o comando:
- curl -sk -D - -o /dev/null 'https://www.stats4u.net/index.php?action=pic&s4uid=1' | grep -i set-cookie
Nenhuma resposta significa que não foi definido nenhum cookie.
Um último aviso, sempre o mesmo: isto descreve o que o software faz. Se isso satisfaz as regras em vigor num determinado país é uma questão para alguém qualificado para responder, e esta não é essa resposta.
Atualização de 11 de setembro de 2026: A partir de 27 de agosto de 2026, o script voltou a ler a resolução do ecrã, a largura da janela do navegador e a proporção de píxeis em todos os sítios que o incorporavam. Desde 11 de setembro de 2026, só o faz onde o proprietário do sítio o ativa com data-screen="1". Sem esse atributo, o script atual não lê nenhum dos três valores, e o servidor também já não os guarda quando vêm de cópias mais antigas.