set a cookie with javascript

set a cookie with javascript

Wer heute eine moderne Webanwendung baut, kommt an der Speicherung von Nutzerdaten im Browser nicht vorbei, und oft ist der schnellste Weg eben Set A Cookie With Javascript zu nutzen. Es klingt trivial. Eine Zeile Code, ein Name, ein Wert – fertig. Aber wer das Thema so oberflächlich angeht, baut sich schneller Sicherheitslücken und rechtliche Fallstricke ein, als der Browser die Daten überhaupt speichern kann. Ich habe in den letzten Jahren unzählige Projekte gesehen, bei denen Entwickler dachten, sie könnten Cookies einfach "nebenbei" abhandeln. Das Ergebnis war meistens Chaos bei der Sitzungsverwaltung oder Ärger mit den Datenschutzbeauftragten, weil wichtige Flags fehlten. Cookies sind das Gedächtnis des Webs. Wenn du dieses Gedächtnis falsch programmierst, vergisst deine Seite nicht nur den Warenkorb des Kunden, sondern gefährdet im schlimmsten Fall auch dessen Privatsphäre.

Die technische Basis hinter Set A Cookie With Javascript

Die Magie passiert über das document.cookie Objekt. Das ist eine ziemlich eigenartige Schnittstelle, wenn man mal ehrlich ist. Man weist ihr einen String zu, aber sie verhält sich nicht wie eine normale Variable. Wenn du eine Zuweisung machst, wird der neue Wert an die bestehende Liste angehängt oder ein existierender Eintrag aktualisiert. Das ist kein einfaches Überschreiben des gesamten Speichers.

Ein minimales Beispiel sieht so aus: document.cookie = "user_pref=darkmode";. Das funktioniert technisch gesehen sofort. Aber ohne Ablaufdatum verschwindet dieser Wert, sobald der Nutzer den Tab schließt. Das nennt man dann Session-Cookie. Willst du, dass die Einstellung morgen noch da ist, musst du max-age oder expires verwenden. Ich bevorzuge max-age, weil es die Zeit in Sekunden angibt. Das ist viel handlicher als dieses sperrige Datumsformat von expires. Wenn du zum Beispiel einen Wert für 30 Tage speichern willst, rechnest du einfach $30 * 24 * 60 * 60$. Das sind 2.592.000 Sekunden.

Die Krux mit dem Pfad

Ein Fehler, der mich früher Nächte gekostet hat, ist der path Parameter. Standardmäßig gilt ein Cookie nur für das Verzeichnis, in dem du dich gerade befindest. Wenn du auf beispiel.de/shop/ bist und dort etwas speicherst, kann die Startseite beispiel.de/ oft nicht darauf zugreifen. Das ist extrem nervig. Die Lösung ist fast immer path=/. Damit stellst du sicher, dass die Information auf der gesamten Domain verfügbar ist. Wer das vergisst, wundert sich später, warum der Login-Status plötzlich weg ist, nur weil der Nutzer in einen anderen Bereich der Seite gewechselt hat.

Sicherheit ist kein optionales Extra

Wir leben in einer Zeit, in der Cross-Site-Scripting (XSS) Angriffe zum Alltag gehören. Wer sensible Daten per Skript speichert, muss sich schützen. Das Attribut Secure sorgt dafür, dass die Daten nur über HTTPS übertragen werden. Das ist heute absoluter Standard. Viel wichtiger ist aber das SameSite Attribut. Seit Chrome 80 und den darauffolgenden Updates in anderen Browsern ist das Verhalten hier strenger geworden. Man hat die Wahl zwischen Strict, Lax und None. Lax ist meistens ein guter Kompromiss. Es verhindert, dass Cookies bei fremden Klicks (wie von einer anderen Webseite) mitgeschickt werden, erlaubt es aber bei normalen Navigationen. Wenn du None wählst, musst du zwingend Secure setzen, sonst blockiert der Browser das Ganze komplett.

Warum die europäische Rechtslage dein Design bestimmt

In Deutschland und der gesamten EU ist die Lage durch die DSGVO und die E-Privacy-Richtlinie klar geregelt. Du kannst nicht einfach Set A Cookie With Javascript aufrufen und alles speichern, was dir vor die Flinte kommt. Technisch notwendige Daten gehen ohne Einwilligung – alles andere braucht das Ja-Wort des Nutzers. Das betrifft vor allem Tracking und Marketing.

Das Bundeskartellamt und der Europäische Gerichtshof haben hierzu wegweisende Urteile gefällt. Ein Klick auf "Alles akzeptieren" muss freiwillig sein. Als Entwickler bedeutet das für dich: Dein Skript darf erst dann feuern, wenn die Logik deines Consent-Banners grünes Licht gibt. Ich baue dafür oft kleine Wrapper-Funktionen. Diese prüfen erst einen globalen Status, bevor sie den eigentlichen Schreibvorgang im Browser ausführen. Das verhindert, dass man aus Versehen doch Daten setzt, bevor der Nutzer zugestimmt hat.

Die Rolle von HTTP-Only

Es gibt eine Sache, die du wissen musst: Wenn du volle Sicherheit für Session-IDs willst, darfst du Set A Cookie With Javascript gar nicht erst verwenden. Solche sensiblen Daten gehören in den Set-Cookie Header vom Server. Warum? Weil man diese mit dem Flag HttpOnly versehen kann. Dann hat kein Skript der Welt Zugriff darauf. Wenn ein Angreifer es schafft, schädlichen Code in deine Seite zu schleusen, kann er diese Cookies nicht auslesen. Das ist die beste Verteidigungslinie gegen Identitätsdiebstahl. Nutze clientseitiges Speichern also nur für unkritische Dinge wie UI-Präferenzen, Sprachwahl oder temporäre Filter-Einstellungen.

LocalStorage als Alternative

Manchmal ist ein Cookie gar nicht das richtige Werkzeug. Wenn du große Mengen an Daten hast, die nie an den Server geschickt werden müssen, ist localStorage oft die bessere Wahl. Cookies werden bei jedem HTTP-Request mit übertragen. Das frisst Bandbreite. Wenn du 20 Cookies hast, bläht das jeden Header auf. Das summiert sich bei vielen kleinen Anfragen schnell. localStorage hingegen bleibt lokal. Er hat mehr Platz (meistens um die 5 MB im Vergleich zu den mickrigen 4 KB pro Cookie). Aber Vorsicht: localStorage hat kein automatisches Ablaufdatum. Die Daten bleiben dort für immer liegen, bis du sie aktiv löschst oder der Nutzer seinen Cache leert.

Praktische Umsetzung und Code-Strukturen

Wenn man professionell arbeitet, schreibt man den String-Salat nicht jedes Mal neu. Man baut sich eine Utility-Klasse oder nutzt eine Library. Aber ganz ehrlich: Für die meisten Projekte reicht eine kleine, selbstgeschriebene Funktion. Das hält den Code schlank und man weiß genau, was passiert.

Hier ist ein Muster, wie ich das meistens löse:

  1. Definiere den Namen und den Wert.
  2. Bestimme die Lebensdauer in Tagen.
  3. Baue den String zusammen, inklusive path=/ und SameSite=Lax.
  4. Verwende encodeURIComponent für den Wert, um Sonderzeichen sicher zu behandeln.

Das Encodieren ist deshalb so wichtig, weil Cookies bestimmte Zeichen wie Semikolons oder Kommas als Trenner interpretieren. Wenn der Name deines Nutzers "Müller; Senior" ist und du das einfach so reinschreibst, bricht das Format. Der Browser würde nach "Müller" aufhören zu lesen. Mit encodeURIComponent wird daraus ein sicherer String, den du beim Auslesen einfach wieder mit decodeURIComponent zurückverwandelst.

Fehlerdiagnose in den DevTools

Wenn dein Code nicht funktioniert, schau nicht nur in die Konsole. Der "Application" Tab (in Chrome) oder "Storage" (in Firefox) ist dein bester Freund. Dort siehst du eine Liste aller aktiven Einträge. Du kannst Werte manuell ändern, löschen oder schauen, ob die Flags Secure und SameSite korrekt gesetzt sind. Oft sieht man dort sofort, dass ein Cookie zwar da ist, aber der Pfad falsch gesetzt wurde, weshalb er auf der aktuellen Unterseite nicht angezeigt wird.

Ein weiteres Problem ist die Domäne. Wenn du auf sub.beispiel.de arbeitest, wird das Cookie standardmäßig auch nur dort gesetzt. Willst du, dass es auch auf beispiel.de oder andere-sub.beispiel.de funktioniert, musst du das domain Attribut explizit setzen. Aber Vorsicht: Du kannst ein Cookie nicht für eine völlig fremde Domain wie google.com setzen. Das verhindert der Browser aus Sicherheitsgründen. Man kann nur "nach oben" delegieren, also von der Subdomain zur Hauptdomain.

Die Performance-Falle

Jedes Mal, wenn du Daten im Header mitschickst, verlangsamt das die Kommunikation zwischen Client und Server minimal. Bei einer schnellen Glasfaserleitung merkst du das nicht. Aber stell dir einen Nutzer im ländlichen Raum vor, der mit einer instabilen Edge-Verbindung kämpft. Da zählt jedes Byte. Wenn du zu viele Informationen über Set A Cookie With Javascript speicherst, bläst du die Request-Größe unnötig auf.

Ich achte immer darauf, dass die Namen der Cookies kurz sind. Statt benutzer_einstellung_fuer_farbschema schreibe ich lieber theme. Das spart über hunderte Requests hinweg tatsächlich messbare Datenmengen. Es klingt nach Pfennigfuchserei, aber in der Summe macht es bei High-Traffic-Seiten einen Unterschied. Die Mozilla Developer Network Dokumentation bietet hierzu exzellente technische Details, die jeder Webentwickler einmal gelesen haben sollte. Es geht dort auch tief in die Historie und die verschiedenen Spezifikationen rein, was hilft zu verstehen, warum manche Dinge heute so seltsam gelöst sind.

Lebensdauer und Müllvermeidung

Es ist eine schlechte Angewohnheit, Cookies ein Ablaufdatum von zehn Jahren zu geben. Nutzer wechseln ihre Geräte, Browser werden bereinigt, und alte Datenleichen helfen niemandem. Ein vernünftiger Zeitraum für Präferenzen ist ein Jahr. Für temporäre Zustände reichen oft Stunden oder Tage. Überlege dir genau, wie lange die Information wirklich relevant ist. Ein "Dauer-Login" ist zwar bequem, sollte aber immer mit Vorsicht genossen werden. In sicherheitskritischen Anwendungen sollte die Sitzung lieber früher als später ablaufen.

Browser-Beschränkungen im Blick behalten

Browser haben Limits. Früher waren das mal 20 Cookies pro Domain, heute sind es meistens mehr (oft um die 50 bis 180), aber die Gesamtgröße darf in der Regel 4096 Bytes nicht überschreiten. Wenn du dieses Limit erreichst, fängt der Browser an, alte Einträge zu löschen, um Platz für neue zu machen. Das passiert völlig lautlos. Es gibt keine Fehlermeldung in der Konsole. Deine Anwendung verhält sich dann einfach unvorhersehbar. Wenn du merkst, dass du an diese Grenzen stößt, ist das ein klares Zeichen dafür, dass du dein Datenmodell überdenken musst. Vielleicht gehören die Daten dann doch eher in eine Datenbank auf dem Server oder in den IndexedDB Speicher des Browsers.

Die Zukunft der Client-Speicherung

Die Industrie bewegt sich weg von Third-Party-Cookies. Apple hat mit seiner Intelligent Tracking Prevention (ITP) in Safari schon vor Jahren angefangen, die Lebensdauer von clientseitig gesetzten Cookies massiv einzuschränken. Teilweise werden diese schon nach sieben Tagen gelöscht, selbst wenn du ein Jahr als Ablaufdatum angegeben hast. Das ist eine Reaktion auf exzessives Tracking. Google zieht mit seiner Privacy Sandbox in Chrome nach.

Für uns Entwickler bedeutet das: Wir können uns nicht mehr blind darauf verlassen, dass Informationen ewig im Browser bleiben. Wir müssen unsere Anwendungen so bauen, dass sie auch dann funktionieren, wenn der lokale Speicher plötzlich leer ist. Das nennt man "Graceful Degradation". Wenn das Cookie weg ist, wird halt nach der Standardsprache gefragt oder der Nutzer muss sich neu einloggen. Das ist zwar weniger komfortabel, aber besser als eine kaputte Seite, die mit einem null-Pointer-Fehler abstürzt.

Zusammenspiel mit Frameworks

Wenn du React, Vue oder Angular nutzt, solltest du Cookies nicht direkt irgendwo in deinen Komponenten verstreuen. Das wird schnell unübersichtlich. Ich erstelle meistens einen zentralen Service oder einen Hook. Das macht den Code testbar. In einem Unit-Test kann man den Cookie-Service dann einfach durch ein Mock-Objekt ersetzen. Wenn man direkt auf document.cookie zugreift, ist das Testen viel schwieriger, weil man immer eine Browser-Umgebung simulieren muss.

Libraries wie js-cookie sind sehr populär und nehmen einem viel Arbeit ab. Sie wiegen nur ein paar Kilobyte und bieten eine saubere API wie Cookies.set('name', 'value'). Für größere Projekte ist das oft die klügere Wahl, als das Rad jedes Mal neu zu erfinden. Dennoch sollte man das Prinzip dahinter verstanden haben, damit man bei Problemen nicht wie der Ochs vorm Berg steht.

Datenschutz-Best-Practices in Deutschland

In Deutschland ist die Aufsicht durch die Landesbeauftragten für Datenschutz recht streng. Eine wichtige Quelle für aktuelle Richtlinien ist das Virtuelle Datenschutzbüro. Hier findet man oft Hinweise darauf, wie Consent-Banner gestaltet sein müssen. Es reicht nicht, nur zu sagen "Wir nutzen Cookies". Man muss auflisten, welche genau, zu welchem Zweck und wie lange sie gespeichert werden. Wer hier schlampig arbeitet, riskiert Abmahnungen. Es ist daher ratsam, die Liste der gesetzten Daten regelmäßig zu prüfen und unnötige Einträge zu entfernen.

Man kann Cookies auch dazu nutzen, um festzustellen, ob ein Nutzer JavaScript überhaupt aktiviert hat. Man setzt per Skript einen Wert und prüft beim nächsten Laden serverseitig, ob dieser Wert ankommt. Wenn nicht, weiß man, dass das Skript blockiert wurde oder der Nutzer es deaktiviert hat. Das ist eine alte Technik, aber sie funktioniert immer noch tadellos für einfache Analysen der Nutzerbasis.

Fehlervermeidung bei der Implementierung

Ein häufiger Stolperstein ist der Umgang mit Subdomains. Wenn du eine Seite unter www.meineseite.de hast und eine andere unter app.meineseite.de, dann sind das für den Browser verschiedene Welten, sofern du das Domain-Flag nicht anpasst. Wenn du möchtest, dass der Nutzer auf beiden Seiten eingeloggt bleibt, musst du das Cookie auf .meineseite.de setzen (der Punkt am Anfang ist ein alter Standard, moderne Browser verstehen es oft auch ohne, aber mit ist man auf der sicheren Seite).

Achte auch auf die Groß- und Kleinschreibung. Cookie-Namen sind Case-Sensitive. User ist nicht dasselbe wie user. Ich habe schon Stunden damit verbracht, einen Fehler zu suchen, nur um am Ende festzustellen, dass ein Kollege im Backend den Namen großgeschrieben hat, während ich ihn im Frontend kleingeschrieben erwartet habe. Einigen wir uns am besten immer auf Kleinschreibung mit Unterstrichen, das vermeidet solche albernen Fehler.

👉 Siehe auch: a56 5g samsung 256 gb
  1. Prüfe zuerst, ob die Information wirklich im Cookie landen muss oder ob sessionStorage reicht.
  2. Wenn du ein Cookie setzt, gib immer einen path=/ an, außer du hast einen sehr speziellen Grund, es einzuschränken.
  3. Nutze max-age für die Lebensdauer und rechne den Wert vorher klar aus.
  4. Setze immer SameSite=Lax, um einen guten Mix aus Sicherheit und Nutzbarkeit zu haben.
  5. Verwende Secure, da heute ohnehin fast jede Seite über HTTPS läuft.
  6. Teste deine Implementierung in verschiedenen Browsern, besonders in Safari, wegen der ITP-Einschränkungen.
  7. Halte die gespeicherten Daten so klein wie möglich, um die Header nicht aufzublähen.
  8. Dokumentiere für dein Team (oder für dich selbst), welche Cookies für was zuständig sind.

Wer diese Schritte befolgt, baut stabile und datenschutzkonforme Anwendungen. Es geht nicht nur darum, dass der Code läuft. Es geht darum, dass er auch unter widrigen Bedingungen, bei Angriffen oder bei strengen Browser-Einstellungen seinen Dienst tut. Cookies mögen wie eine Technik aus den 90ern wirken, aber sie sind immer noch das Rückgrat der Identität im Web. Wer sie beherrscht, hat die volle Kontrolle über die User Experience. Und am Ende ist es genau das, was eine gute Webseite von einer schlechten unterscheidet: Dass sie sich an den Nutzer erinnert, ohne ihn auszuspionieren oder seine Sicherheit zu gefährden. Wenn du also das nächste Mal vor der Aufgabe stehst, Daten lokal zu sichern, denk an die Flags, den Pfad und vor allem an die Privatsphäre deiner Nutzer. Es lohnt sich.

HH

Hannah Hartmann

Mit faktenbasierter Arbeitsweise liefert Hannah Hartmann Beiträge, die Leserinnen und Lesern Orientierung im Nachrichtengeschehen geben.