Att räkna utan cookie
En besöksräknare har en besvärlig uppgift: den måste kunna skilja två besök åt. Om den inte kan det ser en person som laddar om en sida tio gånger ut som tio personer, och siffran på webbplatsen är påhitt.
Den vanliga lösningen är en cookie. Den här webbplatsen använder ingen. Här är vad den gör i stället, och varför den ärliga versionen av den meningen krävde en del arbete att förtjäna.
Cookien som ingen bad om
Fram till i år startade varje anrop till räknaren en PHP-session. Det är en enda kodrad, den ser harmlös ut, och den innebar att varje besökare på varje webbplats med en Stats4U-räknare fick en sessionscookie – satt av oss, på någon annans sida, utan att någon av parterna hade avsett det.
Sessionen användes aldrig till någonting. Beviset var lätt att hitta så fort någon tittade: katalogen där sessionerna lagras innehöll noll filer. Den hade satt en cookie på andras webbplatser, i flera år, för att hålla data som aldrig skrevs och aldrig lästes.
Den är borta från räkningen. En session startas nu bara när någon skapar en räknare eller ändrar dess inställningar – något som personen gör medvetet, på den här webbplatsen.
Vad som ersatte den
Besökare skiljs åt med hjälp av en hash. Fem saker går in:
- IP-adressen
- user agent-strängen
- räknarens id
- dagens datum
- en hemlighet som byts ut varje dag
Ut kommer 16 byte, och det är det som lagras. Det sparas i två dagar och raderas sedan. Själva IP-adressen skrivs aldrig ner, vid något tillfälle.
Två besök från samma person samma dag på samma räknare ger samma 16 byte, så det andra känns igen som en upprepning. I morgon ger samma person något helt annat, eftersom både datumet och hemligheten har ändrats. Det är hela mekanismen.
Varför hemligheten byts ut
Det här är den del som är lätt att göra fel, och den var fel här fram till i år.
Den gamla versionen använde en enda permanent hemlighet. Den gav fortfarande olika hashar för olika personer, vilket låter bra. Men det innebar att den som hade hemligheten kunde ta en misstänkt IP-adress och räkna fram dess hash för vilken dag som helst i arkivet – och därmed förvandla en tabell med anonyma värden på 16 byte till en förteckning över vem som besökte vad, så långt tillbaka som uppgifterna räckte.
Hemligheten byts nu ut dagligen och de gamla raderas efter två dagar. När det har skett kan beräkningen inte längre göras, av någon. Det gäller även den som driver den här webbplatsen, och det är hela poängen: ett skydd som hänger på att operatören sköter sig är inget skydd, det är ett löfte.
Skärmupplösningen – och en lärdom om att ta bort saker
Tidigare samlades skärmupplösningen in. Den är en klassisk signal för fingeravtryck och var inte värd vad den kostade, så den togs bort ur skriptet som körs på den inbäddande sidan.
Det räckte inte, och anledningen är värd att känna till för alla som bygger saker för andras webbplatser. Skriptet levereras med en cachetid på sju dagar, så gamla kopior levde kvar i besökarnas webbläsare en vecka efter ändringen. Värre än så: vissa webbplatser länkar inte alls till skriptet – de klistrade in en kopia av det på sina egna sidor för flera år sedan, och den kopian kommer att fortsätta göra exakt det den gjorde den dag den klistrades in, för alltid.
Så upplösningen fortsatte att komma in. Lösningen var att låta servern vägra ta emot värdet, oavsett vem som skickar det. Att ta bort en datainsamling från klienten stoppar bara nya klienter. Att ta bort den från servern stoppar den omedelbart.
Kontrollera själv
Inget av detta är värt mycket som ett påstående, så här är kommandot:
- curl -sk -D - -o /dev/null 'https://www.stats4u.net/index.php?action=pic&s4uid=1' | grep -i set-cookie
Ingen utdata betyder att ingen cookie sattes.
En avslutande reservation, samma som alltid: det här beskriver vad programvaran gör. Om det uppfyller de regler som gäller i ett visst land är en fråga för någon som är behörig att besvara den, och det här är inte det svaret.
Uppdatering, 11 september 2026: Från och med den 27 augusti 2026 läste skriptet åter skärmupplösningen, bredden på webbläsarfönstret och pixelförhållandet, på varje webbplats som bäddade in det. Sedan den 11 september 2026 gör det så bara där webbplatsens ägare slår på det med data-screen="1". Utan det attributet läser det aktuella skriptet ingen av de tre, och servern lagrar dem inte heller längre från äldre kopior.