Cookies
cookies
ist eine asynchrone Funktion, die es ermöglicht, eingehende HTTP-Anfrage-Cookies in Server-Komponenten zu lesen sowie ausgehende Anfrage-Cookies in Server Actions oder Route Handlers zu lesen/schreiben.
Referenz
Methoden
Folgende Methoden sind verfügbar:
Methode | Rückgabetyp | Beschreibung |
---|---|---|
get('name') | Objekt | Akzeptiert einen Cookie-Namen und gibt ein Objekt mit Name und Wert zurück. |
getAll() | Array von Objekten | Gibt eine Liste aller Cookies mit passendem Namen zurück. |
has('name') | Boolean | Prüft, ob ein Cookie mit dem angegebenen Namen existiert. |
set(name, value, options) | - | Setzt einen ausgehenden Request-Cookie mit Namen, Wert und Optionen. |
delete(name) | - | Löscht den Cookie mit dem angegebenen Namen. |
clear() | - | Löscht alle Cookies. |
toString() | String | Gibt eine String-Repräsentation der Cookies zurück. |
Optionen
Beim Setzen eines Cookies werden folgende Eigenschaften im options
-Objekt unterstützt:
Option | Typ | Beschreibung |
---|---|---|
name | String | Name des Cookies. |
value | String | Wert, der im Cookie gespeichert wird. |
expires | Date | Datum, an dem der Cookie abläuft. |
maxAge | Number | Lebensdauer des Cookies in Sekunden. |
domain | String | Domain, für die der Cookie verfügbar ist. |
path | String, Standard: '/' | Beschränkt den Cookie auf einen bestimmten Pfad innerhalb der Domain. |
secure | Boolean | Cookie wird nur über HTTPS-Verbindungen gesendet. |
httpOnly | Boolean | Beschränkt den Cookie auf HTTP-Anfragen (kein Client-Zugriff). |
sameSite | Boolean, 'lax' , 'strict' , 'none' | Steuert das Cross-Site-Request-Verhalten des Cookies. |
priority | String ("low" , "medium" , "high" ) | Priorität des Cookies. |
encode('value') | Funktion | Funktion zur Kodierung des Cookie-Werts. |
partitioned | Boolean | Gibt an, ob der Cookie partitioniert ist. |
Die einzige Option mit einem Standardwert ist path
.
Weitere Informationen zu diesen Optionen finden Sie in den MDN-Dokumenten.
Wissenswertes
cookies
ist eine asynchrone Funktion, die ein Promise zurückgibt. Sie müssenasync/await
oder Reactsuse
-Funktion verwenden, um auf Cookies zuzugreifen.- In Version 14 und früher war
cookies
eine synchrone Funktion. Zur Abwärtskompatibilität ist der synchrone Zugriff in Next.js 15 noch möglich, wird aber in Zukunft veraltet sein.
- In Version 14 und früher war
cookies
ist eine dynamische API, deren Rückgabewerte nicht im Voraus bekannt sind. Die Verwendung in einem Layout oder einer Seite aktiviert dynamisches Rendering für die Route.- Die
.delete
-Methode kann nur aufgerufen werden:- In einer Server Action oder einem Route Handler.
- Wenn sie zur gleichen Domain gehört, von der
.set
aufgerufen wurde. Bei Wildcard-Domains muss die Subdomain exakt übereinstimmen. Zudem muss der Code über das gleiche Protokoll (HTTP oder HTTPS) ausgeführt werden wie der zu löschende Cookie.
- HTTP erlaubt das Setzen von Cookies nicht nach Beginn des Streamings. Daher muss
.set
in einer Server Action oder einem Route Handler verwendet werden.
Cookie-Verhalten in Server-Komponenten verstehen
Bei der Arbeit mit Cookies in Server-Komponenten ist wichtig zu verstehen, dass Cookies grundsätzlich ein Client-seitiger Speichermechanismus sind:
- Lesen von Cookies funktioniert in Server-Komponenten, weil auf die Cookie-Daten zugegriffen wird, die der Client-Browser in den HTTP-Request-Headern an den Server sendet.
- Setzen von Cookies kann nicht direkt in einer Server-Komponente erfolgen, auch nicht über Route Handler oder Server Actions. Cookies werden tatsächlich vom Browser gespeichert, nicht vom Server.
Der Server kann nur Anweisungen senden (via Set-Cookie
-Header), um den Browser zum Speichern von Cookies anzuleiten - die tatsächliche Speicherung erfolgt Client-seitig. Daher müssen Cookie-Operationen, die den Zustand ändern (.set
, .delete
, .clear
), in einem Route Handler oder einer Server Action durchgeführt werden, wo die Response-Header korrekt gesetzt werden können.
Beispiele
Cookie abrufen
Sie können die Methode (await cookies()).get('name')
verwenden, um einen einzelnen Cookie abzurufen:
Alle Cookies abrufen
Mit (await cookies()).getAll()
können Sie alle Cookies mit passendem Namen abrufen. Wenn name
nicht angegeben ist, werden alle verfügbaren Cookies zurückgegeben.
Cookie setzen
Die Methode (await cookies()).set(name, value, options)
kann in einer Server Action oder einem Route Handler verwendet werden, um einen Cookie zu setzen. Das options
-Objekt ist optional.
Prüfen, ob ein Cookie existiert
Mit (await cookies()).has(name)
können Sie prüfen, ob ein Cookie existiert:
Cookies löschen
Es gibt drei Möglichkeiten, einen Cookie zu löschen.
Verwendung der delete()
-Methode:
Setzen eines neuen Cookies mit gleichem Namen und leerem Wert:
Setzen von maxAge
auf 0 lässt einen Cookie sofort ablaufen. maxAge
akzeptiert einen Wert in Sekunden.
Versionsverlauf
Version | Änderungen |
---|---|
v15.0.0-RC | cookies ist nun eine asynchrone Funktion. Ein Codemod ist verfügbar. |
v13.0.0 | cookies eingeführt. |