Der Browser kann kleine Datenmengen auf dem Gerät speichern, auch nach dem Schließen der Seite.
| Speicher | Größe | Lebensdauer | Mit dem Server geteilt? |
|---|---|---|---|
localStorage | ca. 5 MB | bleibt dauerhaft | nein |
sessionStorage | ca. 5 MB | bis der Tab schließt | nein |
| Cookies | ca. 4 KB | frei einstellbar | ja, bei jeder Anfrage |
| IndexedDB | sehr groß | dauerhaft | nein |
localStorage
localStorage speichert Schlüssel-Wert-Paare, nur als Text:
localStorage.setItem("name", "Mia");
console.log(localStorage.getItem("name")); // "Mia"
console.log(localStorage.getItem("gibtsnicht")); // null
localStorage.removeItem("name");
localStorage.clear(); // alles löschen
console.log(localStorage.length);Objekte und Listen wandelst du mit JSON um:
Ergebnis
Wichtige Regeln
- Speichere keine Passwörter oder Tokens im
localStorage: Jedes Skript auf der Seite kann es lesen - Daten gelten pro Origin (Protokoll + Domain + Port)
- Lies Daten niemals blind: Nutzer können sie ändern. Immer prüfen und mit Standardwerten absichern
- Das Ereignis
storagemeldet Änderungen aus anderen Tabs
window.addEventListener("storage", (e) => {
console.log(e.key, e.oldValue, "->", e.newValue);
});Cookies
Cookies werden bei jeder Anfrage an den Server mitgeschickt, deshalb eignen sie sich für Anmeldungen. Sie werden meist vom Server mit Set-Cookie gesetzt:
Set-Cookie: sitzung=abc123; HttpOnly; Secure; SameSite=Lax; Max-Age=3600; Path=/| Attribut | Bedeutung |
|---|---|
HttpOnly | JavaScript kann das Cookie nicht lesen (Schutz vor XSS) |
Secure | nur über HTTPS |
SameSite=Lax/Strict | Schutz vor Cross-Site-Anfragen (CSRF) |
Max-Age, Expires | Lebensdauer |
In JavaScript: document.cookie = "thema=dunkel; max-age=31536000; path=/". Das Lesen ist umständlich. Für reine Einstellungen reicht localStorage.
IndexedDB
Für große oder strukturierte Daten (Offline-Apps) gibt es IndexedDB, eine asynchrone Datenbank im Browser. Sie ist sperrig, deshalb nutzt man meist die Bibliothek idb oder Dexie.
Einstellungen speichern (Beispiel)
Ergebnis
Merke
localStoragespeichert dauerhaft nur Text; Objekte über JSONsessionStoragegilt nur für den Tab- Zugriffe in
try/catchsetzen und Daten beim Lesen prüfen - Keine Passwörter im Web-Speicher; für Anmeldungen
HttpOnly-Cookies - Tracking-Cookies brauchen Einwilligung
Aufgabe
Speichere eine Einkaufsliste (Array von Texten) im localStorage und zeige sie beim Neuladen der Seite wieder an.