Wat zijn cookies? Hoe websites je onthouden
Een cookie is een klein stukje tekst dat een website aan je browser vraagt op te slaan en bij elk volgend bezoek aan die site weer terug te sturen. Zo "onthoudt" een website jou: dat je bent ingelogd, wat er in je winkelmandje zit, welke taal je hebt gekozen. Cookies zijn gewoon gegevens, geen programma's, maar omdat ze je kunnen identificeren, zijn ze belangrijk voor zowel beveiliging als privacy.
Waarom het ertoe doet als je met AI bouwt
Cookies liggen onder verschillende functies die je aan een AI-bouwer vraagt, vaak zonder dat het woord "cookie" ooit ter sprake komt:
- Inloggen. In de meeste webapps betekent "ingelogd blijven" een sessiecookie. Hoe die cookie is ingesteld, bepaalt hoe makkelijk hij te stelen is.
- Winkelmandjes en voorkeuren. Een mandje dat een paginaverversing overleeft, berust vaak op een cookie of op opslag in de browser.
- Analyse en advertenties. Het toevoegen van Google Analytics, een Meta-pixel of een chatwidget voegt meestal cookies van andere bedrijven toe.
- Juridische meldingen. Op veel plekken hebben sommige cookies eerst toestemming van de bezoeker nodig, en daar komen cookiebanners vandaan.
Als je weet welke cookies je app zet en waarom, kun je betere keuzes maken voor beveiligingsinstellingen, toestemming en je privacyverklaring.
Een alledaagse vergelijking
Denk aan een garderobenummer. Je geeft je jas af en krijgt een genummerd ticket. Het ticket bevat je jas niet, alleen een nummer. Elke keer dat je terugkomt bij de balie, laat je het ticket zien, en de medewerker weet welke jas van jou is.
Een sessiecookie werkt op dezelfde manier. Wanneer je inlogt, houdt de server je gegevens aan zijn kant en geeft hij je browser een ticket — een lang willekeurig ID. Je browser laat dat ticket bij elk verzoek zien, en de server zoekt op wie jij bent. Wie het ticket kopieert, kan de jas ophalen, en daarom moeten inlogcookies worden beschermd.
Hoe een cookie werkt
- Je bezoekt een site. Het antwoord van de server bevat een header zoals
Set-Cookie: session_id=8f3k...; HttpOnly; Secure; SameSite=Lax. - Je browser slaat die op, gekoppeld aan het domein van die site.
- Bij elk later verzoek naar dezelfde site voegt de browser automatisch
Cookie: session_id=8f3k...toe. - De server leest hem en weet dat jij het bent.
De JavaScript van de pagina kan ook cookies maken, maar de belangrijkste — inlogsessies — moeten door de server worden gezet en voor JavaScript verborgen blijven.
Soorten cookies
| Soort | Wat het betekent | Voorbeeld |
|---|---|---|
| Sessiecookie | Geen vervaldatum; wordt verwijderd wanneer de browsersessie eindigt | Een korte betaalstap |
| Blijvende cookie | Heeft een vervaldatum (Expires of Max-Age) en overleeft herstarts | "Onthoud me 30 dagen" |
| Eerste partij | Gezet door de site in de adresbalk | Je login op die site |
| Derde partij | Gezet door een ander domein dat in de pagina is ingesloten | Een tracking-ID van een advertentienetwerk |
| Strikt noodzakelijk | Nodig voor een dienst die de gebruiker heeft gevraagd | Inlogsessie, winkelmandje |
| Niet-noodzakelijk | Prettig om te hebben voor de eigenaar van de site | Analyse, advertenties, A/B-testen |
Browsers beperken cookies van derden steeds meer, omdat ze worden gebruikt om mensen over websites heen te volgen. Verschillende grote browsers blokkeren er nu standaard veel, en de details veranderen voortdurend, dus bouw niets belangrijks op cookies van derden.
Een uitgewerkt voorbeeld: een kleine online winkel
Stel dat je een winkel hebt gebouwd die handgemaakte kaarsen verkoopt. Dit zijn de cookies die een verstandige versie zou zetten, en waarom.
session — wordt gezet wanneer de eigenaar of een klant inlogt. Hij bevat alleen een willekeurig ID; de server bewaart de echte sessiegegevens. Instellingen: HttpOnly (paginascripts kunnen hem niet lezen), Secure (alleen verzonden via HTTPS), SameSite=Lax (niet meegestuurd bij de meeste verzoeken die door andere sites worden gestart). Strikt noodzakelijk.
cart_id — laat een bezoeker die niet is ingelogd zijn mandje behouden. Hij verwijst naar een winkelmandje dat is opgeslagen in de database. Strikt noodzakelijk, omdat de bezoeker heeft gevraagd dingen aan een mandje toe te voegen.
theme — onthoudt de donkere modus. Dit kan een cookie zijn, maar hij hoeft nooit de server te bereiken, dus localStorage van de browser is eenvoudiger.
Analysecookies — toegevoegd als je een analysetool installeert. Deze zijn niet-noodzakelijk. In de EU en het VK vereisen ze meestal toestemming voordat ze worden gezet, dus het analysescript moet wachten tot de bezoeker op "Accepteren" klikt.
Let op wat de winkel niet in cookies bewaart: de naam, het adres of de betaalgegevens van de klant. Cookies reizen mee met elk verzoek en staan op het apparaat van de gebruiker, dus ze moeten ID's bevatten, geen persoonsgegevens.
Veelgebruikte termen uitgelegd
| Term | Wat het betekent |
|---|---|
| Cookie | Een klein naam-waardepaar dat de browser opslaat en terugstuurt naar de site. |
Set-Cookie | De responsheader waarmee een server een cookie aanmaakt of bijwerkt. |
| Sessie | De registratie van de server van een ingelogde gebruiker, gekoppeld aan een cookie-ID. |
HttpOnly | Verhindert dat JavaScript van de pagina de cookie leest, wat schade door geïnjecteerde scripts beperkt. |
Secure | De cookie wordt alleen over versleutelde HTTPS-verbindingen verzonden. |
SameSite | Bepaalt of de cookie wordt meegestuurd bij verzoeken van andere sites (Strict, Lax of None). |
Expires / Max-Age | Wanneer de cookie moet worden verwijderd. |
| Domein / Pad | Welke adressen op de site de cookie ontvangen. |
| localStorage | Opslag in de browser die door paginacode kan worden gelezen, maar niet automatisch naar de server wordt gestuurd. |
| XSS | Cross-site scripting: een script van een aanvaller dat in jouw pagina draait en gegevens probeert te stelen. |
| CSRF | Cross-site request forgery: een andere site die de browser ertoe brengt een verzoek met jouw cookies te versturen. |
| Cookietoestemming | Vooraf toestemming vragen aan bezoekers voordat niet-noodzakelijke cookies worden gezet. |
Veelvoorkomende fouten en misverstanden
- "Cookies zijn virussen." Het is gewone tekst. Ze kunnen geen code op je computer uitvoeren.
- Gevoelige gegevens in cookies zetten. Sla een willekeurig ID op en bewaar de details op de server.
- Inlogtokens in localStorage. Elk script dat op de pagina draait, kan localStorage lezen, ook een geïnjecteerd script. Een
HttpOnly-cookie kan door paginascripts helemaal niet worden gelezen. SecureenHttpOnlyontbreken. Deze twee vlaggen zijn goedkoop en dichten veelvoorkomende gaten.- Aannemen dat een banner alles dekt. Een banner die analyse laadt voordat iemand op "Accepteren" klikt, doet zijn werk niet.
- Uitloggen vergeten. Uitloggen moet de cookie verwijderen en de sessie op de server beëindigen, zodat een gekopieerde cookie niet meer werkt.
- "Als ik geen cookies gebruik, gelden de privacyregels niet." Regels zoals de AVG gelden voor persoonsgegevens waar ze ook worden opgeslagen — ook in lokale opslag, apparaatvingerafdrukken en serverlogs.
Wat je aan je AI-bouwer kunt vragen
- "Geef een lijst van elke cookie die de app zet, waarvoor die dient, hoe lang hij blijft, en of hij strikt noodzakelijk is."
- "Gebruik voor de inlogsessie een
HttpOnly-,Secure-,SameSite=Lax-cookie. Zet geen authenticatietokens in localStorage." - "Bewaar in de cookie alleen een willekeurig sessie-ID; sla sessiegegevens op de server op."
- "Bij uitloggen: verwijder de cookie en maak de sessie op de server ongeldig."
- "Laad analyse- of marketingscripts pas nadat de bezoeker ze heeft geaccepteerd, en onthoud zijn keuze."
- "Voeg een eenvoudige cookiesectie toe aan de privacyverklaring die overeenkomt met de lijst hierboven."
Voor het toestemmingsdeel, zie hoe voeg je cookietoestemming toe. Voor hoe cookies bij inloggen passen, lees wat authenticatie is.
Cookies in Mythex
Mythex biedt geen ingebouwd inloggen voor de gebruikers van je app, dus de cookies die je app zet, komen uit de eigen code en de tools die je eraan toevoegt — bijvoorbeeld een sessiecookie van de authenticatiemethode die je kiest. Vraag de agent in de chat om ze op te sommen, de instellingen aan te scherpen of een toestemmingsbanner toe te voegen, en controleer het resultaat in de live preview voordat je publiceert. Het documentatierecept over inloggen aan je app toevoegen is een goede startprompt, en beveiliging voor apps die je bouwt behandelt hoe je sleutels en geheimen uit de browser houdt.
Veelgestelde vragen
Wat is een cookie op een website?
Een cookie is een klein stukje tekst dat een website aan je browser vraagt op te slaan. De browser stuurt het bij elk later verzoek naar die site terug, waardoor de site dingen kan onthouden, zoals of je bent ingelogd of wat er in je winkelmandje zit.
Zijn cookies gevaarlijk?
Cookies zijn gewoon gegevens, geen programma's, dus ze kunnen geen code uitvoeren en een computer niet besmetten. De zorgen gaan over privacy, wanneer cookies van derden je over meerdere sites volgen, en over beveiliging, wanneer een inlogcookie wordt gestolen en gebruikt om zich als jou voor te doen.
Wat is het verschil tussen eerstepartij- en derdepartijcookies?
Een eerstepartijcookie wordt gezet door de site in je adresbalk, bijvoorbeeld een inlogcookie. Een derdepartijcookie wordt gezet door een ander domein dat in de pagina is ingesloten, zoals een advertentienetwerk, en wordt vaak gebruikt om je over veel sites te volgen.
Heb ik een cookiebanner nodig?
Dat hangt af van waar je gebruikers zitten en welke cookies je gebruikt. In de EU en het VK hebben niet-noodzakelijke cookies, zoals analyse of advertenties, meestal eerst toestemming nodig, terwijl cookies die strikt nodig zijn voor de dienst, zoals een inlogsessie, meestal niet vallen onder die toestemming. Controleer de regels die op jou van toepassing zijn.
Wat is het verschil tussen cookies en localStorage?
Beide slaan gegevens op in de browser. Cookies worden bij elk verzoek automatisch naar de server gestuurd, wat past bij inloggen. localStorage blijft in de browser en wordt alleen gelezen door de eigen code van de pagina, wat past bij voorkeuren zoals een thema.