Signatur
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
pathoder unterschiedlicherdomain. - 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
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();
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 ?? '?'})`));
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');
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:
cookieStoregibt 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 perHttpOnlygeschützt sind. - Unterschiede zwischen Browsern: Firefox und Safari liefern teilweise nur
nameundvalue. Man sollte sich also nicht aufdomain,pathoderexpiresverlassen. Ältere Firefox- und Safari-Versionen unterstützen die API gar nicht. Als Rückfallebene dientdocument.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 einemTypeErrorabgelehnt. Hat das Dokument einen undurchsichtigen Ursprung (opaque origin, z. B. in einem sandboxed iframe), wird mit einemSecurityErrorabgelehnt. - Die Reihenfolge der Ergebnisse ist nicht garantiert. Cookies mit spezifischerem Pfad stehen meist vorne. Wer einen bestimmten Cookie braucht, sollte ausdrücklich nach
path/domainfiltern und nicht über den Index zugreifen. - Das Ergebnis ist eine Momentaufnahme. Wer auf Änderungen reagieren will, nutzt das
change-Event voncookieStore.