Sessions (expérimental)
Type : SessionConfig
Par défaut : undefined
astro@5.1.0
Nouveau
Les sessions sont utilisées pour stocker l’état de l’utilisateur entre les demandes de pages rendues à la demande.
Cette fonctionnalité expérimentale vous permet de stocker et d’accéder à des éléments tels que le statut de connexion, le contenu du panier d’achat ou d’autres données spécifiques à l’utilisateur :
Les sessions s’appuient sur un pilote de session configurable pour stocker les données sur l’objet session
. Un cookie de session stocke un identifiant de session.
L’objet session
vous permet d’interagir avec l’état de l’utilisateur stocké (par exemple, ajouter des articles à un panier d’achat) et l’identifiant de session (par exemple, supprimer le cookie d’identifiant de session lors de la déconnexion).
Activation des sessions expérimentales
Titre de la section Activation des sessions expérimentalesDans cette première version de experimental.sessions
, les adaptateurs de serveur officiels d’Astro n’ont pas encore été mis à jour pour fournir un pilote de session par défaut basé sur la fonctionnalité de stockage par défaut de la plate-forme. Jusqu’à ce qu’ils soient intégrés, vous devrez spécifier vous-même un driver
dans l’objet de configuration experimental.sessions
en plus d’ajouter un adaptateur.
Les sections suivantes montrent les pilotes recommandés pour chaque adaptateur. (Ceux-ci seront automatiquement configurés pour vous dans la version stable de cette fonctionnalité). Vous pouvez également spécifier n’importe quel pilote pris en charge à partir d’unstorage.
Configuration de sessions avec l’adaptateur Node
Titre de la section Configuration de sessions avec l’adaptateur NodeL’adaptateur Node est compatible avec le pilote de système de fichiers. Notez qu’il ne peut pas être utilisé dans les environnements sans serveur, car ils n’ont pas de système de fichiers partagé.
Configuration d’un pilote de session pour d’autres adaptateurs
Titre de la section Configuration d’un pilote de session pour d’autres adaptateursChoisissez le nom du driver
d’unstorage qui correspond à la fonction de stockage fournie par votre plateforme d’hébergement, comme le pilote Netlify Blobs (netlify-blobs
), le pilote Cloudflare KV (cloudflare-kv-binding
) ou le pilote Deno KV (deno-kv
). Vous pouvez également utiliser un pilote multiplateforme tel que Upstash ou Redis.
Certains pilotes peuvent nécessiter l’installation de paquets supplémentaires. Par exemple, le pilote netlify-blobs
nécessite le paquet @netlify/blobs
, et Upstash nécessite le paquet @upstash/redis
. Certains pilotes peuvent également nécessiter l’installation de variables d’environnement ou d’informations d’identification.
Options du pilote
Titre de la section Options du piloteVous pouvez également passer toutes les options disponibles au pilote d’unstorage dans un objet session.options
séparé. L’exemple suivant configure le pilote Netlify Blobs en fournissant un name
et en spécifiant un mode de consistency
:
Utilisation des sessions
Titre de la section Utilisation des sessionsUne fois que vous avez configuré un pilote, vous pouvez utiliser l’objet session
pour interagir avec la session. Cet objet est accessible en tant que Astro.session
dans vos composants et pages Astro et sur l’objet context
dans les points de terminaison de l’API, le middleware et les actions. L’API est la même dans tous les cas.
Dans la plupart des cas, vous n’aurez besoin que d’utiliser Astro.session.get()
et Astro.session.set()
. Pour les autres méthodes disponibles, voir la section API.
Composants et pages Astro
Titre de la section Composants et pages AstroDans les composants et les pages .astro
, vous pouvez accéder à l’objet session via l’objet global Astro
. Par exemple, pour afficher le nombre d’articles dans un panier d’achat :
Points d’accès à l’API
Titre de la section Points d’accès à l’APIDans les points de terminaison de l’API, l’objet de session est disponible dans l’objet context
. Par exemple, pour ajouter un article à un panier d’achat :
Actions
Titre de la section ActionsDans les actions, l’objet session est disponible dans l’objet context
. Par exemple, pour ajouter un article à un panier d’achat :
Middleware
Titre de la section MiddlewareLes sessions ne sont actuellement pas prises en charge par le middleware.
Dans le middleware, l’objet session est disponible sur l’objet context
. Par exemple, pour définir l’heure de la dernière visite dans la session :
Cookies
Titre de la section CookiesLes sessions sont générées lors du premier accès et un cookie d’identification de session est placé dans la réponse. Aucune donnée utilisateur n’est stockée dans le cookie, juste un identifiant utilisé pour identifier la session de l’utilisateur. La session peut être régénérée à tout moment avec Astro.session.regenerate()
, et détruite avec Astro.session.destroy()
.
session.cookie
Titre de la section session.cookieType : string
| object
Par défaut : undefined
Une propriété optionnelle pour définir les options du cookie. La propriété cookie.name
peut être automatiquement définie en fournissant une chaîne de caractères. Pour configurer des options supplémentaires, il faut fournir un objet.
API Sessions
Titre de la section API SessionsL’objet session est disponible dans tous les contextes Astro, y compris les composants, les actions et les points de terminaison API. Dans les composants, il est accessible via l’objet global Astro
, et dans les actions et les points de terminaison d’API, il est disponible sur l’objet context
. L’API est la même dans tous les cas.
Les valeurs sont sérialisées et désérialisées en utilisant devalue, qui est la même bibliothèque utilisée par la couche de contenu et les actions. Cela signifie que les types supportés sont les mêmes, et incluent les chaînes de caractères, les nombres, Date
, Map
, Set
, URL
, les tableaux et les objets simples.
session.get()
Titre de la section session.get()Type : (key: string) => Promise<any>
Renvoie la valeur de la clé donnée dans la session. Si la clé n’existe pas, il renvoie undefined
.
session.set()
Titre de la section session.set()Type : (key: string, value: any, options?: { ttl: number }) => void
Définit la valeur de la clé donnée dans la session. La valeur peut être de n’importe quel type sérialisable.
session.regenerate()
Titre de la section session.regenerate()Type : () => void
Régénère l’identifiant de session. La meilleure pratique consiste à appeler cette fonction lorsqu’un utilisateur se connecte ou augmente ses privilèges, afin de prévenir les attaques par fixation de session.
session.destroy()
Titre de la section session.destroy()Type : () => void
Détruit la session, en supprimant le cookie et l’objet du backend. Elle doit être appelée lorsqu’un utilisateur se déconnecte ou que sa session est invalidée d’une autre manière.
Lecture complémentaire
Titre de la section Lecture complémentairePour plus de détails et pour donner votre avis sur cette API expérimentale, consultez le RFC Sessions.
Reference