{"licence":{"name":"CC BY-SA 4.0","spdx":"CC-BY-SA-4.0","url":"https://creativecommons.org/licenses/by-sa/4.0/","attribution":"Atlas, a bilingual technical dictionary (https://cmaintz.github.io/tech-atlas/)"},"id":"cs/cookie","url":{"en":"https://cmaintz.github.io/tech-atlas/en/terms/cs/cookie/","da":"https://cmaintz.github.io/tech-atlas/da/terms/cs/cookie/"},"term":{"en":"Cookie","da":"Cookie"},"aka":{"en":["HTTP cookie","browser cookie"],"da":["HTTP-cookie","browsercookie"]},"domain":["cs"],"cluster":"web","layer":"application","status":"current","era":1994,"summary":{"en":"A small piece of text a website asks the browser to keep and send back on every visit, so the site can recognise it.","da":"En lille tekstbid, som et websted beder browseren gemme og sende med tilbage ved hvert besøg, så stedet kan genkende den."},"body":{"formal":{"en":"A name and value that a server sets in an HTTP reply; the browser stores it for that website and adds it to later requests to the same site until it runs out, with flags that limit where and how it may be sent.","da":"Et navn og en værdi, som en server sætter i et HTTP-svar; browseren gemmer det for webstedet og lægger det på senere forespørgsler til samme sted, indtil det udløber, med markeringer, der begrænser, hvor og hvordan det må sendes."},"plain":{"en":"Like the coat check ticket you get at a theatre - you hand it back each time, and the staff know which coat is yours without asking your name.","da":"Som garderobesedlen i teatret - du rækker den frem hver gang, og personalet ved, hvilken frakke der er din, uden at spørge om dit navn."},"inPractice":{"en":"After a customer logs in to a Danish web shop, the shop sets a cookie holding a session number, so the basket and login survive as she moves from page to page.","da":"Når en kunde logger ind i en dansk webshop, sætter butikken en cookie med et sessionsnummer, så kurven og login følger med, mens hun går fra side til side."},"whyItMatters":{"en":"Whoever holds a login cookie is treated as its owner, so it must be hidden from code on the page and never sent over plain HTTP; cookies that track people need consent under EU cookie rules.","da":"Den, der har en login-cookie, behandles som dens ejer, så den skal skjules for kode på siden og aldrig sendes over ren HTTP; cookies, der sporer personer, kræver samtykke efter cookiereglerne."}},"deepDive":{"en":"Cookies were introduced by Netscape in 1994 and are specified today by RFC 6265 (April 2011), which described actual browser behaviour after the earlier RFC 2109 and RFC 2965 failed in practice; the IETF revision known as RFC 6265bis codifies later additions such as SameSite and cookie prefixes. A server sends one Set-Cookie response header per cookie, and the browser returns matching cookies as name=value pairs in a single Cookie request header. Attributes control scope and lifetime: Expires or Max-Age (Max-Age wins if both are present; neither makes it a session cookie), Domain (omitted means host-only; set means the domain and all subdomains, and a public suffix is refused), Path (a convenience, not a security boundary), Secure, HttpOnly and SameSite with the values Strict, Lax or None, where None requires Secure. RFC 6265 §6.1 asks browsers to support at least 4096 bytes per cookie, 50 cookies per domain and 3000 in total; Chrome caps lifetimes at 400 days.\n\nCookie scoping predates and differs from the same-origin policy: cookies are keyed by host or domain and path, historically not by scheme or port, so http and https versions of a host and different ports have traditionally shared cookies. A compromised or attacker-controlled subdomain can therefore set cookies for its parent domain (cookie tossing) and fix a victim's session. The prefixes __Secure- (must carry Secure) and __Host- (Secure, Path=/ and no Domain, hence host-only) let a server detect such injection. SameSite works on the site (scheme plus registrable domain from the Public Suffix List), not the origin; Chrome made Lax the default for cookies without the attribute in 2020.\n\nA session cookie is a bearer token, so every theft path matters: script access through XSS (blocked by HttpOnly), network interception (blocked by Secure together with HSTS), and increasingly infostealer malware that copies the browser's cookie store and replays the session elsewhere, bypassing MFA entirely. Browser vendors respond with measures such as Chrome's app-bound encryption of the cookie store and device-bound session credentials. Because cookies are attached automatically, they also enable CSRF, which SameSite reduces but does not fully remove; the session identifier must also be regenerated at login to prevent session fixation.\n\nLegally, ePrivacy Directive 2002/58/EC Art. 5(3), as amended in 2009, requires consent before storing or reading information on a user's device unless strictly necessary for a service the user requested; in Denmark this is implemented by the cookiebekendtgørelse. Consent must meet the GDPR standard, and the CJEU held in Planet49 (C-673/17, 2019) that pre-ticked boxes are not valid consent. Safari and Firefox block or partition third-party cookies by default, the Partitioned attribute (CHIPS) gives embedded services per-site cookie jars, and Google has abandoned its plan to phase out third-party cookies in Chrome.","da":"Cookies blev indført af Netscape i 1994 og er i dag specificeret i RFC 6265 (april 2011), som beskrev browsernes faktiske adfærd, efter at de tidligere RFC 2109 og RFC 2965 slog fejl i praksis; IETF's revision, kendt som RFC 6265bis, fastlægger senere tilføjelser som SameSite og cookie-præfikser. En server sender én Set-Cookie-header pr. cookie i svaret, og browseren sender de matchende cookies tilbage som navn=værdi-par i én Cookie-header i forespørgslen. Attributter styrer rækkevidde og levetid: Expires eller Max-Age (Max-Age vinder, hvis begge er til stede; uden nogen af dem er det en sessionscookie), Domain (udeladt betyder kun den præcise vært; angivet betyder domænet og alle underdomæner, og et offentligt suffiks afvises), Path (en bekvemmelighed, ikke en sikkerhedsgrænse), Secure, HttpOnly og SameSite med værdierne Strict, Lax eller None, hvor None kræver Secure. RFC 6265 afsnit 6.1 beder browsere understøtte mindst 4096 byte pr. cookie, 50 cookies pr. domæne og 3000 i alt; Chrome begrænser levetiden til 400 dage.\n\nCookiernes afgrænsning er ældre end og forskellig fra same-origin policy: cookies er knyttet til vært eller domæne og sti, historisk ikke til skema eller port, så http- og https-udgaven af en vært og forskellige porte har traditionelt delt cookies. Et kompromitteret eller angriberstyret underdomæne kan derfor sætte cookies for sit overordnede domæne (cookie tossing) og fastlåse et offers session. Præfikserne __Secure- (skal have Secure) og __Host- (Secure, Path=/ og ingen Domain, altså kun værten) lader serveren opdage den slags injektion. SameSite arbejder med sitet (skema plus registrerbart domæne fra Public Suffix List), ikke med oprindelsen; Chrome gjorde Lax til standard for cookies uden attributten i 2020.\n\nEn sessionscookie er et bearer token, så alle veje til tyveri tæller: adgang fra script via XSS (blokeres af HttpOnly), aflytning på netværket (blokeres af Secure sammen med HSTS) og i stigende grad infostealer-malware, der kopierer browserens cookielager og genbruger sessionen et andet sted, helt uden om MFA. Browserproducenterne svarer igen med tiltag som Chromes app-bound kryptering af cookielageret og enhedsbundne sessionsloginoplysninger. Fordi cookies sendes med automatisk, muliggør de også CSRF, som SameSite mindsker, men ikke fjerner helt; sessions-id'et skal desuden fornyes ved login for at forhindre session fixation.\n\nJuridisk kræver e-databeskyttelsesdirektivet 2002/58/EF art. 5, stk. 3, som ændret i 2009, samtykke, før oplysninger gemmes eller læses på brugerens udstyr, medmindre det er strengt nødvendigt for en tjeneste, brugeren har bedt om; i Danmark er det gennemført i cookiebekendtgørelsen. Samtykket skal opfylde databeskyttelsesforordningens krav, og EU-Domstolen fastslog i Planet49 (C-673/17, 2019), at forudafkrydsede felter ikke er gyldigt samtykke. Safari og Firefox blokerer eller partitionerer tredjepartscookies som standard, attributten Partitioned (CHIPS) giver indlejrede tjenester en cookiebeholder pr. site, og Google har opgivet planen om at udfase tredjepartscookies i Chrome."},"edges":[{"type":"requires","to":"cs/http","confidence":"high","strength":"normal"},{"type":"requires","to":"cs/web-browser","confidence":"high","strength":"normal"},{"type":"used-with","to":"cs/session","why":{"en":"A cookie is the usual way a website carries the session marker from one request to the next.","da":"En cookie er den almindelige måde, et websted bærer sessionens kendetegn fra én forespørgsel til den næste."},"confidence":"high","strength":"primary"},{"type":"used-with","to":"cs/web-application","confidence":"high","strength":"normal"}],"depth":6,"sources":[{"title":"RFC 6265 - HTTP State Management Mechanism","url":"https://www.rfc-editor.org/rfc/rfc6265","tier":"standard","publisher":"IETF"},{"title":"MDN Web Docs - Using HTTP cookies","url":"https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Cookies","tier":"official-doc","publisher":"Mozilla"}],"draft":true}