familiewapen Mick Beermickbeer.com

manuscript · Praktische lessen

beginselPraktische lessenverwant

Cookies: functioneel versus niet-functioneel, met voorbeelden

De wet vraagt geen toestemming voor cookies die strikt noodzakelijk zijn om een dienst te leveren die je zelf hebt gevraagd. Voor al het andere wel, vooraf. Het verschil tussen die twee is de hele cookiewet, en het wordt structureel verkeerd getrokken. Hier staat per soort cookie of hij zonder toestemming mag, met echte voorbeelden en de toets die je zelf kunt doen.

De enige vraag die telt

De cookiewet, artikel 11.7a van de Telecommunicatiewet, kent maar twee uitzonderingen op de toestemmingsplicht. Een cookie mag zonder toestemming als hij dient om communicatie over een netwerk uit te voeren, of als hij strikt noodzakelijk is om een dienst te leveren die de gebruiker zelf uitdrukkelijk heeft gevraagd.

Let op het woord strikt. Niet handig, niet gebruikelijk, niet nuttig voor de organisatie. Strikt noodzakelijk voor de dienst die de bezoeker vroeg. De toets is: valt de dienst om zonder deze cookie, vanuit het perspectief van de bezoeker?

Dat is de hele wet. Al het andere volgt daaruit. Toch wordt het structureel verkeerd getrokken, en het patroon is altijd hetzelfde: de organisatie bepaalt wat noodzakelijk is vanuit haar eigen bedrijfsvoering, niet vanuit de dienst die de bezoeker aanvroeg.

Letterlijk: wat ik aantrof voor de toestemmingsvraag

Hieronder staan de cookies die ik op Nederlandse overheidssites daadwerkelijk aantrof in de modus waarin de bezoeker niets deed. Geen klik, geen keuze, alleen de pagina openen. De aantallen komen uit de scan van 14 juli 2026 over 1.718 sites.

Dit mag zonder toestemming (functioneel):

JSESSIONID              48 sites   sessie op een Java-server, houdt je ingelogd
ASP.NET_SessionId       22 sites   idem op een .NET-server
PHPSESSID                          idem op PHP, de bekendste van de drie
Archiefsessid           32 sites   sessie binnen een archiefomgeving
GUEST_LANGUAGE_ID       18 sites   onthoudt je taalkeuze
COOKIE_SUPPORT          18 sites   test of je browser cookies aanneemt
cookies_consent         17 sites   onthoudt je eigen cookiekeuze
OptanonConsent                     idem, van OneTrust

De laatste twee verdienen toelichting, want ze zorgen voor verwarring. De cookie die jouw keuze onthoudt is zelf functioneel. Zou hij dat niet zijn, dan moest je bij elke pagina opnieuw kiezen, en dat is precies de dienst die je vroeg. Een toestemmingsmodule mag dus een cookie zetten. Wat hij niet mag, is naast die keuze-cookie ook nog telemetrie over jou wegsturen. Zie Je cookiebanner is zelf een tracker.

Dit mag niet zonder toestemming, en stond er toch:

stg_traffic_source_priority   730 sites   Piwik PRO tag manager
stg_last_interaction          730 sites   idem, legt je gedrag vast
stg_returning_visitor         730 sites   idem, herkent je als terugkeerder
stg_externalReferrer          353 sites   idem, legt vast waar je vandaan kwam
_ga                           143 sites   Google Analytics, jouw bezoeker-ID
_gid                           51 sites   Google Analytics, per dag
_gat                           17 sites   Google Analytics, snelheidsregeling
_pk_id / _pk_ses               18 sites   Matomo of Piwik, bezoeker en sessie
VISITOR_INFO1_LIVE             20 sites   YouTube, via een ingesloten video
YSC                            20 sites   YouTube, sessie
__Secure-YNID                  20 sites   YouTube, identificatie
__Secure-ROLLOUT_TOKEN         20 sites   YouTube
VISITOR_PRIVACY_METADATA       20 sites   YouTube, ironisch genoeg

Het woord stg_returning_visitor is de scherpste illustratie die er bestaat. Een cookie die letterlijk vastlegt dat jij hier eerder was, gezet voordat je iets kon kiezen, op 730 overheidssites.

En dit is het grijze gebied, met de redenering erbij:

__cf_bm            52 sites   Cloudflare bot management

Cloudflare zet deze cookie om geautomatiseerd verkeer te onderscheiden van mensen. Het argument voor de uitzondering is dat de dienst zonder botbescherming omvalt. Het argument ertegen is dat de bezoeker geen botbescherming vroeg, maar een webpagina. Mijn eigen standpunt: als de cookie uitsluitend een kortlopend beveiligingsdoel dient, niet over sites heen leest en niet naar analytics gaat, is de uitzondering verdedigbaar. Kun je dat niet aantonen, dan is hij toestemmingsplichtig. Label dit als verdedigbaar, niet als vaststaand.

Analytics is geen aparte categorie

De hardnekkigste misvatting is dat analytics een eigen uitzondering heeft. Die bestaat niet in de wet. Wat wel bestaat, is de handreiking van de Autoriteit Persoonsgegevens voor analytics-cookies die zo zijn ingericht dat de inbreuk verwaarloosbaar is. Om daaronder te vallen moet je, cumulatief:

1. een verwerkersovereenkomst hebben met de leverancier; 2. het laatste octet van het IP-adres maskeren; 3. gegevensdeling met de leverancier voor eigen doeleinden uitzetten; 4. geen cookies van derden gebruiken die de leverancier over sites heen kan koppelen; 5. de bezoeker hierover informeren in je privacyverklaring.

Als een van deze vijf ontbreekt, is je analytics gewoon toestemmingsplichtig. In mijn metingen is punt 3 het vaakst het struikelblok, en punt 4 daarna: zodra je Google Analytics via de standaardconfiguratie draait, staat gegevensdeling aan en gaat het naar een partij die het over duizenden sites kan aan elkaar knopen.

Zelf gehoste analytics, Matomo of Piwik PRO op je eigen domein, komt veel dichter bij de uitzondering. Maar zelf gehost is geen vrijbrief: op 730 overheidssites zag ik de tag manager van Piwik PRO gedragscookies zetten voor de toestemmingsvraag. De techniek was privacyvriendelijk, de configuratie niet. Zie De rijksbrede analytics staat op 668 sites voor toestemming.

Waar je als bouwer op moet letten

Dit is de checklist die ik zelf afloop, in deze volgorde, omdat elke stap goedkoper is dan de volgende.

Stap 1. Tel wat er laadt voordat je iets klikt. Open de ontwikkelaarstools, tabblad netwerk, laad de pagina, doe niets. Alles wat je daar ziet naar een ander domein dan je eigen, is verdacht tot het tegendeel blijkt. Sla het op als HAR-bestand zodat je het later kunt narekenen. Zie Netwerkverkeer lezen via HAR-files.

Stap 2. Haal je lettertypen, kaarten en scripts van je eigen server. Dit is de grootste bron van pre-consent verkeer op Nederlandse overheidssites, en de makkelijkste te repareren. Zie Wat je van een CDN haalt, laadt voor je banner.

Stap 3. Vervang ingesloten video door een facade. Een YouTube-embed zet vijf cookies voordat iemand op play drukt. Een statische afbeelding met een afspeelknop die de echte speler pas na de klik laadt, kost je twintig regels code. Het youtube-nocookie.com-domein helpt, maar het is geen volledige oplossing: het stelt het zetten van cookies uit tot de klik, en dat is precies wat je wilt, maar controleer het zelf per implementatie.

Stap 4. Zet je tag manager op weigeren als startstand. De meeste tag managers laden hun eigen container voordat de toestemmingsstatus bekend is. Dat is een instelling, geen wet van de natuur. Configureer de container zo dat er zonder expliciete toestemmingsvlag niets vuurt.

Stap 5. Test je weigerknop echt. Klik weigeren, herlaad, kijk opnieuw in het netwerktabblad. Op vier van de vijf gemeten sites was er geen verschil. Zie Weigeren doet op vier van de vijf sites niets.

Stap 6. Controleer je DNS op verhulde derden. Een subdomein van jezelf dat via een CNAME naar een tracker wijst, telt juridisch als een derde partij, maar gedraagt zich technisch als eigen verkeer. Zie CNAME-cloaking zit op vier op de tien overheidssites.

Wat je als bouwer niet moet willen

Niet: een toestemmingsmodule kopen en denken dat je klaar bent. De module is een vraag, niet een slot. In mijn metingen laadde bij twee van de gemeten modules op elke onderzochte site al iets voordat de vraag beantwoord was.

Niet: gegevens verzamelen omdat het kan. Elk veld dat je verzamelt is een veld dat kan lekken, dat je moet verantwoorden en dat je moet bewaren binnen een termijn. Wat je niet bewaart, kan niet lekken.

Niet: de privacyverklaring laten schrijven door iemand die de code niet heeft gezien. Het gat tussen de verklaring en de uitvoering is de meest voorkomende bevinding in mijn werk. Zie Papier versus code: de verklaring en de uitvoering.

Niet: aannemen dat een keurmerk of een gerenommeerde leverancier je vrijwaart. Ik heb de partijen gemeten die privacy keuren, en ze zakten zelf voor de toets.

De toets die je zelf kunt doen, in vijf minuten

1. Open een privevenster, ga naar je site, doe niets. 2. Ontwikkelaarstools, tabblad Application of Opslag, kijk onder Cookies. 3. Staat er iets anders dan een sessie-, taal- of keuzecookie? Dan heb je een probleem. 4. Klik weigeren, herlaad, kijk opnieuw. 5. Is de lijst gelijk gebleven? Dan heb je een groter probleem, want dan is je weigerknop een decorstuk.

Dit kost minder tijd dan het lezen van je eigen cookieverklaring, en het levert bewijs op in plaats van een indruk.

citeer alsBeer, M. (2026, 25 juli). Cookies: functioneel versus niet-functioneel, met voorbeelden. mickbeer.com. https://mickbeer.com/#cookies-functioneel-versus-niet-functioneel-met-voorbeelden

lees dit stuk in het manuscript, met alles waar het aan hangt