Start · Sprachen · JavaScript · Referenz · CookieStore.getAll()

CookieStore.getAll()

Methode

Liefert ein Promise mit einem Array aller Cookies, die zum angegebenen Namen oder zu den Optionen passen. Ohne Argument werden alle sichtbaren Cookies geliefert.

seit JavaScript Chrome/Edge 87+, Firefox 140+, Safari 18.4+ (nur i Kategorie: webapi

Signatur

CookieStore.prototype.getAll(name | options)

Beschreibung

getAll() gehört zur asynchronen Cookie Store API. Die API ersetzt das mühsame Zerlegen von document.cookie. Die Methode gibt ein Promise zurück. Es wird mit einem Array von CookieListItem-Objekten erfüllt, und zwar mit allen Cookies, die für das aktuelle Dokument bzw. den Geltungsbereich des Service Workers sichtbar sind und zum Filter passen.

Die Methode lässt sich auf drei Arten aufrufen:

  • ohne Argument: Alle sichtbaren Cookies werden geliefert.
  • mit einem String: Nur Cookies mit genau diesem Namen werden geliefert. Das können mehrere sein, etwa bei gleichem Namen mit unterschiedlichem path oder unterschiedlicher domain.
  • mit einem Options-Objekt { name, url }: Nach Namen und/oder URL filtern. Das ist vor allem in Service Workern nützlich.

Anders als document.cookie blockiert getAll() den Hauptthread nicht. Die API ist auch in Service Workern über self.cookieStore verfügbar. Damit kann man dort z. B. Sitzungs-Cookies prüfen, ohne ein Dokument zu brauchen. Wenn es nur um einen einzelnen Cookie geht, ist CookieStore.get() kürzer. Sie liefert den ersten Treffer oder null.

Parameter

Name Typ Default Beschreibung
$name string Name der gesuchten Cookies. Wird dieser Parameter übergeben, kann kein Options-Objekt verwendet werden.
$options { name?: string, url?: string } {} Options-Objekt als Alternative zu name. name filtert nach dem Cookie-Namen. url liefert die Cookies, die für diese URL gelten. Im Dokument muss die URL der Dokument-URL entsprechen. Im Service Worker muss sie innerhalb seines Geltungsbereichs (Scope) liegen, sonst wird das Promise mit einem TypeError abgelehnt.

Rückgabewert

Typ
Promise<Array<CookieListItem>>
Beschreibung
Ein Promise, das mit einem Array von Objekten erfüllt wird. Jedes Objekt enthält name und value. Chromium liefert zusätzlich domain, path, expires (Zeitstempel in Millisekunden oder null), secure, sameSite und partitioned. Passt kein Cookie, ist das Array leer.

Beispiele

Alle Cookies der Seite auflisten

const listCookies = async () => {
  if (!('cookieStore' in window)) {
    console.warn('Cookie Store API nicht verfügbar');
    return;
  }
  const cookies = await cookieStore.getAll();
  for (const { name, value } of cookies) {
    console.log(`${name} = ${value}`);
  }
};

await cookieStore.set('theme', 'dark');
await cookieStore.set('lang', 'de');
await listCookies();
theme = dark lang = de

Mehrere Cookies mit demselben Namen finden

// z. B. 'pref' einmal für / und einmal für /shop gesetzt
await cookieStore.set({ name: 'pref', value: 'global', path: '/' });
await cookieStore.set({ name: 'pref', value: 'shop', path: '/shop' });

// Auf einer Seite unter /shop sind beide sichtbar
const prefs = await cookieStore.getAll('pref');
console.log(prefs.map((c) => `${c.value} (${c.path ?? '?'})`));
["shop (/shop)", "global (/)"]

Cookies als Objekt umwandeln (Ersatz für document.cookie-Parsing)

const getCookieMap = async () => {
  const cookies = await cookieStore.getAll();
  return Object.fromEntries(cookies.map(({ name, value }) => [name, value]));
};

const jar = await getCookieMap();
console.log(jar.theme ?? 'light');
dark

Im Service Worker nach URL filtern

// sw.js
self.addEventListener('fetch', (event) => {
  const url = new URL(event.request.url);
  if (!url.pathname.startsWith('/api/')) return;

  event.respondWith((async () => {
    const cookies = await self.cookieStore.getAll({
      name: 'session',
      url: self.registration.scope
    });
    if (cookies.length === 0) {
      return new Response('Nicht angemeldet', { status: 401 });
    }
    return fetch(event.request);
  })());
});

// Wichtig · Fallstricke

  • Nur sichere Kontexte: cookieStore gibt es nur unter HTTPS (bzw. localhost). Vor der Nutzung sollte man per Feature-Erkennung prüfen ('cookieStore' in self).
  • HttpOnly-Cookies sind unsichtbar, genau wie bei document.cookie. Die API ist daher kein Weg, um Sitzungs-Tokens auszulesen, die per HttpOnly geschützt sind.
  • Unterschiede zwischen Browsern: Firefox und Safari liefern teilweise nur name und value. Man sollte sich also nicht auf domain, path oder expires verlassen. Ältere Firefox- und Safari-Versionen unterstützen die API gar nicht. Als Rückfallebene dient document.cookie.
  • Die url-Option muss im Dokument zur aktuellen Dokument-URL passen und im Service Worker innerhalb seines Scopes liegen. Sonst wird das Promise mit einem TypeError abgelehnt. Hat das Dokument einen undurchsichtigen Ursprung (opaque origin, z. B. in einem sandboxed iframe), wird mit einem SecurityError abgelehnt.
  • Die Reihenfolge der Ergebnisse ist nicht garantiert. Cookies mit spezifischerem Pfad stehen meist vorne. Wer einen bestimmten Cookie braucht, sollte ausdrücklich nach path/domain filtern und nicht über den Index zugreifen.
  • Das Ergebnis ist eine Momentaufnahme. Wer auf Änderungen reagieren will, nutzt das change-Event von cookieStore.