cookies
cookies
est une fonction asynchrone qui vous permet de lire les cookies des requêtes HTTP entrantes dans les Composants Serveur, et de lire/écrire les cookies des requêtes sortantes dans les Actions Serveur ou les Gestionnaires de Route.
Référence
Méthodes
Les méthodes suivantes sont disponibles :
Méthode | Type de retour | Description |
---|---|---|
get('nom') | Objet | Accepte un nom de cookie et retourne un objet avec le nom et la valeur. |
getAll() | Tableau d'objets | Retourne une liste de tous les cookies correspondant au nom. |
has('nom') | Booléen | Accepte un nom de cookie et retourne un booléen indiquant si le cookie existe. |
set(nom, valeur, options) | - | Accepte un nom de cookie, une valeur et des options, et définit le cookie de la requête sortante. |
delete(nom) | - | Accepte un nom de cookie et le supprime. |
clear() | - | Supprime tous les cookies. |
toString() | Chaîne de caractères | Retourne une représentation textuelle des cookies. |
Options
Lors de la définition d'un cookie, les propriétés suivantes de l'objet options
sont supportées :
Option | Type | Description |
---|---|---|
name | Chaîne de caractères | Spécifie le nom du cookie. |
value | Chaîne de caractères | Spécifie la valeur à stocker dans le cookie. |
expires | Date | Définit la date exacte d'expiration du cookie. |
maxAge | Nombre | Définit la durée de vie du cookie en secondes. |
domain | Chaîne de caractères | Spécifie le domaine où le cookie est disponible. |
path | Chaîne de caractères, par défaut : '/' | Limite la portée du cookie à un chemin spécifique dans le domaine. |
secure | Booléen | Garantit que le cookie n'est envoyé que via des connexions HTTPS pour une sécurité accrue. |
httpOnly | Booléen | Restreint le cookie aux requêtes HTTP, empêchant l'accès côté client. |
sameSite | Booléen, 'lax' , 'strict' , 'none' | Contrôle le comportement du cookie pour les requêtes cross-site. |
priority | Chaîne de caractères ("low" , "medium" , "high" ) | Spécifie la priorité du cookie |
encode('valeur') | Fonction | Spécifie une fonction qui sera utilisée pour encoder la valeur d'un cookie. |
partitioned | Booléen | Indique si le cookie est partitionné. |
La seule option avec une valeur par défaut est path
.
Pour en savoir plus sur ces options, consultez la documentation MDN.
Bon à savoir
cookies
est une fonction asynchrone qui retourne une promesse. Vous devez utiliserasync/await
ou la fonctionuse
de React pour accéder aux cookies.- Dans la version 14 et antérieures,
cookies
était une fonction synchrone. Pour assurer la compatibilité ascendante, vous pouvez toujours y accéder de manière synchrone dans Next.js 15, mais ce comportement sera déprécié à l'avenir.
- Dans la version 14 et antérieures,
cookies
est une API Dynamique dont les valeurs retournées ne peuvent pas être connues à l'avance. Son utilisation dans une mise en page ou une page activera le rendu dynamique pour la route.- La méthode
.delete
ne peut être appelée que :- Dans une Action Serveur ou un Gestionnaire de Route.
- Si elle appartient au même domaine depuis lequel
.set
a été appelé. Pour les domaines génériques, le sous-domaine spécifique doit correspondre exactement. De plus, le code doit être exécuté sur le même protocole (HTTP ou HTTPS) que le cookie que vous souhaitez supprimer.
- HTTP ne permet pas de définir des cookies après le début du streaming, vous devez donc utiliser
.set
dans une Action Serveur ou un Gestionnaire de Route.
Comprendre le comportement des cookies dans les Composants Serveur
Lorsque vous travaillez avec des cookies dans les Composants Serveur, il est important de comprendre que les cookies sont fondamentalement un mécanisme de stockage côté client :
- Lire les cookies fonctionne dans les Composants Serveur car vous accédez aux données de cookie que le navigateur du client envoie au serveur dans les en-têtes de requête HTTP.
- Définir des cookies ne peut pas être fait directement dans un Composant Serveur, même en utilisant un Gestionnaire de Route ou une Action Serveur. Cela s'explique par le fait que les cookies sont en réalité stockés par le navigateur, pas par le serveur.
Le serveur ne peut qu'envoyer des instructions (via les en-têtes Set-Cookie
) pour indiquer au navigateur de stocker les cookies - le stockage réel a lieu côté client. C'est pourquoi les opérations sur les cookies qui modifient l'état (.set
, .delete
, .clear
) doivent être effectuées dans un Gestionnaire de Route ou une Action Serveur où les en-têtes de réponse peuvent être correctement définis.
Exemples
Obtenir un cookie
Vous pouvez utiliser la méthode (await cookies()).get('nom')
pour obtenir un seul cookie :
Obtenir tous les cookies
Vous pouvez utiliser la méthode (await cookies()).getAll()
pour obtenir tous les cookies correspondant à un nom. Si nom
n'est pas spécifié, elle retourne tous les cookies disponibles.
Définir un cookie
Vous pouvez utiliser la méthode (await cookies()).set(nom, valeur, options)
dans une Action Serveur ou un Gestionnaire de Route pour définir un cookie. L'objet options
est facultatif.
Vérifier si un cookie existe
Vous pouvez utiliser la méthode (await cookies()).has(nom)
pour vérifier si un cookie existe :
Supprimer des cookies
Il existe trois façons de supprimer un cookie.
En utilisant la méthode delete()
:
En définissant un nouveau cookie avec le même nom et une valeur vide :
Définir maxAge
à 0 expire immédiatement un cookie. maxAge
accepte une valeur en secondes.
Historique des versions
Version | Modifications |
---|---|
v15.0.0-RC | cookies est désormais une fonction asynchrone. Un codemod est disponible. |
v13.0.0 | cookies introduit. |