Zählen ohne Cookie
Ein Besucherzähler hat eine unangenehme Aufgabe: Er muss zwei Besuche voneinander unterscheiden. Gelingt ihm das nicht, sieht eine Person, die eine Seite zehnmal neu lädt, wie zehn Personen aus, und die Zahl auf der Seite ist erfunden.
Die übliche Lösung ist ein Cookie. Diese Seite verwendet keines. Hier ist, was sie stattdessen tut – und warum die ehrliche Fassung dieses Satzes einige Arbeit gekostet hat.
Das Cookie, um das niemand gebeten hat
Bis zu diesem Jahr startete jede Anfrage an den Zähler eine PHP-Session. Das ist eine einzige Codezeile, sie wirkt harmlos, und sie bedeutete, dass jeder Besucher jeder Seite, die einen Stats4U-Zähler verwendet, ein Session-Cookie erhielt – gesetzt von uns, auf fremden Seiten, ohne dass eine der beiden Seiten das beabsichtigt hätte.
Die Session wurde nie für irgendetwas verwendet. Der Beweis war leicht zu finden, sobald jemand nachsah: Das Verzeichnis, in dem Sessions gespeichert werden, enthielt null Dateien. Sie hatte jahrelang ein Cookie auf den Websites anderer Leute gesetzt, um Daten zu halten, die nie geschrieben und nie gelesen wurden.
Sie ist aus dem Zählpfad verschwunden. Eine Session wird jetzt nur noch gestartet, wenn jemand einen Zähler erstellt oder neu konfiguriert – eine Handlung, die bewusst auf dieser Seite vorgenommen wird.
Was es ersetzt hat
Besucher werden anhand eines Hashwerts unterschieden. Fünf Dinge fließen ein:
- die IP-Adresse
- der User-Agent
- die Zähler-ID
- das heutige Datum
- ein Geheimnis, das sich täglich ändert
Heraus kommen 16 Bytes, und genau die werden gespeichert. Sie werden zwei Tage lang aufbewahrt und dann gelöscht. Die IP-Adresse selbst wird zu keinem Zeitpunkt aufgezeichnet.
Zwei Besuche derselben Person am selben Tag bei demselben Zähler erzeugen dieselben 16 Bytes, sodass der zweite als Wiederholung erkannt wird. Morgen erzeugt dieselbe Person etwas völlig anderes, weil sich sowohl das Datum als auch das Geheimnis geändert haben. Das ist der gesamte Mechanismus.
Warum das Geheimnis wechselt
Das ist der Teil, der sich leicht falsch machen lässt, und hier war er bis zu diesem Jahr falsch.
Die alte Version verwendete ein einziges dauerhaftes Geheimnis. Das erzeugte weiterhin unterschiedliche Hashwerte für unterschiedliche Personen, was zunächst unproblematisch klingt. Es bedeutete jedoch, dass jeder, der dieses Geheimnis kannte, eine vermutete IP-Adresse nehmen und deren Hashwert für jeden beliebigen Tag im Archiv neu berechnen konnte – wodurch sich eine Tabelle anonymer 16-Byte-Werte wieder in eine Aufzeichnung darüber verwandelte, wer was besucht hat, zurück bis an den Anfang der vorhandenen Daten.
Das Geheimnis wechselt jetzt täglich, und die alten werden nach zwei Tagen gelöscht. Sobald das geschehen ist, kann die Berechnung von niemandem mehr durchgeführt werden. Das schließt auch denjenigen ein, der diese Seite betreibt – das ist der springende Punkt: Ein Schutz, der vom Wohlverhalten des Betreibers abhängt, ist kein Schutz, sondern ein Versprechen.
Die Bildschirmauflösung, und eine Lehre übers Löschen
Die Bildschirmauflösung wurde früher erfasst. Sie ist ein klassisches Fingerprinting-Signal und war nicht wert, was sie kostete, also wurde sie aus dem Skript entfernt, das auf der eingebundenen Seite läuft.
Das reichte nicht aus, und der Grund dafür lohnt sich für jeden zu kennen, der etwas für die Websites anderer Leute baut. Das Skript wird mit einer Cache-Lebensdauer von sieben Tagen ausgeliefert, sodass alte Kopien nach der Änderung noch eine Woche lang in den Browsern der Besucher aktiv blieben. Schlimmer noch: Manche Seiten verlinken das Skript überhaupt nicht – sie haben vor Jahren eine Kopie davon in ihre eigenen Seiten eingefügt, und diese Kopie wird für immer genau das tun, was sie am Tag des Einfügens getan hat.
Die Auflösung kam also weiterhin an. Die Lösung bestand darin, den Server den Wert ablehnen zu lassen, unabhängig davon, wer ihn sendet. Eine Datenerhebung auf dem Client zu entfernen, stoppt nur neue Clients. Sie auf dem Server zu entfernen, stoppt sie sofort.
Zum Selberprüfen
All das ist als bloße Behauptung wenig wert, daher hier der Befehl:
- curl -sk -D - -o /dev/null 'https://www.stats4u.net/index.php?action=pic&s4uid=1' | grep -i set-cookie
Keine Ausgabe bedeutet, dass kein Cookie gesetzt wurde.
Eine abschließende Warnung, dieselbe wie immer: Dies beschreibt, was die Software tut. Ob das den am jeweiligen Ort geltenden Vorschriften genügt, ist eine Frage für jemanden, der qualifiziert ist, sie zu beantworten – und diese Antwort ist das hier nicht.
Nachtrag vom 11.09.2026: Vom 27.08.2026 an las das Skript Bildschirmauflösung, Breite des Browserfensters und Pixelverhältnis wieder aus, auf jeder Seite, die es einband. Seit dem 11.09.2026 tut es das nur noch dort, wo der Seitenbetreiber es mit data-screen="1" einschaltet. Ohne dieses Attribut liest das aktuelle Skript keinen der drei Werte, und der Server speichert sie auch von älteren Kopien nicht mehr.