API de Astro Session Driver
Las sesiones de Astro te permiten compartir datos entre solicitudes para páginas renderizadas bajo demanda. Requieren un Astro Session Driver para almacenar los datos de sesión.
Drivers integrados
Sección titulada “Drivers integrados”Astro exporta drivers de sesión integrados desde astro/config:
import { sessionDrivers } from 'astro/config'Cualquier driver de unstorage puede usarse, por ejemplo:
import { defineConfig, sessionDrivers } from 'astro/config'
export default defineConfig({ session: { driver: sessionDrivers.redis({ url: process.env.REDIS_URL }), }})Es posible que algunos controladores necesiten la instalación de paquetes adicionales. Algunos controladores también pueden requerir que se establezcan variables de entorno o credenciales. Consulta la documentación de Unstorage para obtener más información.
Construir un driver de sesión
Sección titulada “Construir un driver de sesión”Un driver de sesión está compuesto por dos partes:
- La configuración del driver, que le permite a Astro saber qué implementación usar en tiempo de ejecución y qué configuración reenviar
- La implementación del driver, que maneja la lógica de almacenamiento en tiempo de ejecución
La configuración del driver de sesión
Sección titulada “La configuración del driver de sesión”Un SessionDriverConfig es un objeto que contiene un entrypoint de runtime obligatorio y una config opcional. El método preferido para implementarlo es exportar una función que devuelva este objeto y tome la configuración como un parámetro opcional.
El siguiente ejemplo define una configuración de driver en memoria:
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, }}Luego se registra en la configuración de Astro:
import { defineConfig } from 'astro/config'import { memoryDriver } from './driver/config'
export default defineConfig({ session: { driver: memoryDriver({ max: 500 }) }})entrypoint
Sección titulada «entrypoint»Type: string | URL
astro@6.0.0
Define el entrypoint para la implementación del driver.
Type: Record<string, any> | undefined
astro@6.0.0
Define la configuración serializable pasada a la implementación del driver en tiempo de ejecución.
La implementación del driver de sesión
Sección titulada “La implementación del driver de sesión”Un SessionDriver es un objeto responsable de almacenar, recuperar y eliminar datos al usar sesiones en tiempo de ejecución (ej. context.session.set()). Puedes implementarlo en tu módulo de driver de sesión exportando una función por defecto que tome la configuración del driver como parámetro.
El siguiente ejemplo implementa un driver en memoria:
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) }, }}setItem()
Sección titulada “setItem()”Type: (key: string, value: any) => Promise<void>
astro@6.0.0
Define una función que establece datos de sesión por clave.
getItem()
Sección titulada “getItem()”Type: (key: string) => Promise<any>
astro@6.0.0
Define una función que recupera datos de sesión por clave.
removeItem()
Sección titulada “removeItem()”Type: (key: string) => Promise<void>
astro@6.0.0
Define una función que elimina datos de sesión por clave.
Compatibilidad con Unstorage
Sección titulada “Compatibilidad con Unstorage”Los tipos de driver de Unstorage son compatibles con el tipo SessionDriver de Astro.
Eso significa que puedes usar un export del paquete unstorage como entrypoint. Por ejemplo:
import type { SessionDriverConfig } from 'astro'
export function configuredRedisDriver(): SessionDriverConfig { return { entrypoint: 'unstorage/drivers/redis', config: { tls: true } }}Alternativamente, puedes importar y usar un driver de unstorage directamente en la implementación. Por ejemplo:
import type { SessionDriver } from 'astro'import redisDriver from "unstorage/drivers/redis";
export default function(config): SessionDriver { return redisDriver({ ...config, tls: true })}