Aller au contenu

API des pilotes de session d'Astro

Les sessions d’Astro permettent de partager des données entre les requêtes pour les pages rendues à la demande. Elles nécessitent un pilote de session Astro pour stocker les données de session.

Astro exporte des pilotes de session intégrés depuis astro/config :

import { sessionDrivers } from 'astro/config'

N’importe quel pilote unstorage peut être utilisé, par exemple :

astro.config.mjs
import { defineConfig, sessionDrivers } from 'astro/config'
export default defineConfig({
session: {
driver: sessionDrivers.redis({
url: process.env.REDIS_URL
}),
}
})

Un pilote de session est composé de deux parties :

Un SessionDriverConfig est un objet contenant un point d’entrée d’exécution (entrypoint) obligatoire et une config facultative. La méthode privilégiée pour l’implémenter consiste à exporter une fonction qui renvoie cet objet et prend la configuration comme paramètre optionnel.

L’exemple suivant définit une configuration de pilote de mémoire :

driver/config.ts
import type { SessionDriverConfig } from 'astro'
export interface Config {
max?: number;
}
export function memoryDriver(config: Config = {}): SessionDriverConfig {
return {
entrypoint: new URL('./runtime.js', import.meta.url),
config,
}
}

Il est ensuite enregistré dans la configuration d’Astro :

astro.config.ts
import { defineConfig } from 'astro/config'
import { memoryDriver } from './driver/config'
export default defineConfig({
session: {
driver: memoryDriver({
max: 500
})
}
})

Type : string | URL

Ajouté à la version : astro@6.0.0 Nouveau

Définit le point d’entrée pour l’implémentation du pilote.

Type : Record<string, any> | undefined

Ajouté à la version : astro@6.0.0 Nouveau

Définit la configuration sérialisable transmise à l’implémentation du pilote au moment de l’exécution.

SessionDriver est un objet responsable du stockage, de la récupération et de la suppression des données lors de l’utilisation de sessions à l’exécution (par exemple context.session.set()). Vous pouvez l’implémenter dans votre module de pilote de session en exportant une fonction par défaut qui accepte la configuration du pilote en tant que paramètre.

L’exemple suivant implémente un pilote de mémoire :

driver/runtime.ts
import type { SessionDriver } from 'astro'
import type { Config } from './config'
import { LRUCache } from 'lru-cache'
export default function(config: Config): SessionDriver {
const cache = new LRUCache({ max: config.max })
return {
setItem: async (key, value) => {
cache.set(key, value)
},
getItem: async (key) => {
return cache.get(key)
},
removeItem: async (key) => {
cache.delete(key)
},
}
}

Type : (key: string, value: any) => Promise<void>

Ajouté à la version : astro@6.0.0 Nouveau

Définit une fonction qui définit les données de session par nom de propriété.

Type : (key: string) => Promise<any>

Ajouté à la version : astro@6.0.0 Nouveau

Définit une fonction qui récupère les données de session par nom de propriété.

Type : (key: string) => Promise<void>

Ajouté à la version : astro@6.0.0 Nouveau

Définit une fonction qui supprime les données de session par nom de propriété.

Les types de pilotes d’Unstorage sont compatibles avec le type SessionDriver d’Astro.

Cela signifie que vous pouvez utiliser une exportation de paquet Unstorage comme point d’entrée. Par exemple :

driver/config.ts
import type { SessionDriverConfig } from 'astro'
export function configuredRedisDriver(): SessionDriverConfig {
return {
entrypoint: 'unstorage/drivers/redis',
config: {
tls: true
}
}
}

Vous pouvez également importer et utiliser directement un pilote Unstorage dans l’implémentation. Par exemple :

driver/runtime.ts
import type { SessionDriver } from 'astro'
import redisDriver from "unstorage/drivers/redis";
export default function(config): SessionDriver {
return redisDriver({
...config,
tls: true
})
}
Contribuer Communauté Parrainer