コンテンツにスキップ

Astro Session Driver API

Astroのセッションを使用すると、オンデマンドでレンダリングされるページのリクエスト間でデータを共有できます。これには、セッションデータを保存するためのAstroセッションドライバーが必要です。

Astroは、astro/configからビルトインのセッションドライバーをエクスポートしています。

import { sessionDrivers } from 'astro/config'

任意のunstorageドライバーを使用できます。例:

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

セッションドライバーは、次の2つの要素で構成されます。

SessionDriverConfigは、必須の実行時entrypoint(エントリポイント)と、オプションのconfigを含むオブジェクトです。推奨される実装方法は、オプションのパラメータとして設定を受け取り、このオブジェクトを返す関数をエクスポートすることです。

以下の例では、メモリドライバーの設定を定義しています。

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,
}
}

その後、Astroの設定ファイルで登録します。

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

型: string | URL

追加: astro@6.0.0

ドライバーの実装のためのエントリポイントを定義します。

型: Record<string, any> | undefined

追加: astro@6.0.0

実行時にドライバーの実装に渡される、シリアライズ可能な設定を定義します。

SessionDriverは、実行時にセッションを使用する (EN)際(例:context.session.set())に、データの保存、取得、削除を担当するオブジェクトです。セッションドライバーモジュールで、ドライバー設定をパラメータとして受け取るデフォルト関数をエクスポートすることで実装できます。

以下の例では、メモリドライバーを実装しています。

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)
},
}
}

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

追加: astro@6.0.0

キーによってセッションデータを設定する関数を定義します。

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

追加: astro@6.0.0

キーによってセッションデータを取得する関数を定義します。

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

追加: astro@6.0.0

キーによってセッションデータを削除する関数を定義します。

ビルトインドライバーはUnstorageと同じドライバーを提供します。より高度なカスタマイズが必要な場合は、任意のUnstorageドライバーを基にして、独自のドライバーを構築できます。

unstorageパッケージをインストールして、ドライバーの指定子をエントリポイントとして渡します。

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

また、Unstorageドライバーをインポートして、自身の実装の中でラップすることもできます。これは、ドライバーに追加の処理を加えたり、実行時に設定を上書きしたりする場合に便利です。

以下の例では、Redisドライバーのttlのデフォルト値を7日間に設定しています。

driver/runtime.ts
import type { SessionDriver } from "astro";
import redisDriver, { type RedisOptions } from "unstorage/drivers/redis";
export default function (config: RedisOptions): SessionDriver {
const driver = redisDriver({
...config,
ttl: config.ttl ?? 60 * 60 * 24 * 7, // デフォルト値を7日間に設定
});
return {
async getItem(key) {
return await driver.getItem(key);
},
async setItem(key, value) {
await driver.setItem?.(key, value, {});
},
async removeItem(key) {
await driver.removeItem?.(key, {});
},
};
}
貢献する コミュニティ スポンサー