diff --git a/src/content/docs/ja/guides/sessions.mdx b/src/content/docs/ja/guides/sessions.mdx
index dbc809c368fa0..422140941c9d1 100644
--- a/src/content/docs/ja/guides/sessions.mdx
+++ b/src/content/docs/ja/guides/sessions.mdx
@@ -57,21 +57,21 @@ export default defineConfig({
次の例では、[Unstorageとの互換性](/ja/reference/session-driver-reference/#unstorageとの互換性)を利用して、Redisドライバーを独自のエントリポイントで設定しています。
-1. [`unstorage`パッケージ](https://unstorage.unjs.io/guide)をインストールします。
+1. [`unstorage`](https://www.npmjs.com/package/unstorage)と[`ioredis`](https://www.npmjs.com/package/ioredis)パッケージをインストールします。
```sh
- npm install unstorage
+ npm install unstorage ioredis
```
```sh
- pnpm add unstorage
+ pnpm add unstorage ioredis
```
```sh
- yarn add unstorage
+ yarn add unstorage ioredis
```
@@ -83,33 +83,73 @@ export default defineConfig({
import { REDIS_HOST, REDIS_PORT } from "astro:env";
export default function (): SessionDriver {
- return redisDriver({
+ const driver = redisDriver({
host: REDIS_HOST,
port: REDIS_PORT,
});
+
+ 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, {});
+ },
+ };
}
```
3. このファイルをAstroの設定ファイルでドライバーのエントリポイントとして使用します。
- ```js title="astro.config.mjs" {11-13}
+ ```js title="astro.config.mjs" {21-23}
import { defineConfig, envField, sessionDrivers } from "astro/config";
import vercel from "@astrojs/vercel";
export default defineConfig({
adapter: vercel(),
env: {
- REDIS_HOST: envField.string({ context: "server", access: "public", default: "localhost" }),
- REDIS_PORT: envField.number({ context: "server", access: "public", default: 6379 }),
+ schema: {
+ REDIS_HOST: envField.string({
+ context: "server",
+ access: "public",
+ default: "localhost",
+ }),
+ REDIS_PORT: envField.number({
+ context: "server",
+ access: "public",
+ default: 6379,
+ }),
+ },
},
session: {
driver: {
- entrypoint: new URL('./src/session-driver.ts', import.meta.url),
- }
- }
+ entrypoint: new URL("./src/session-driver.ts", import.meta.url),
+ },
+ },
});
```
+### セッションの無効化
+
+
+
+
+
+セッションドライバーが設定されていない場合、自動的にセッションの実行環境がサーバーのバンドルから取り除かれます。追加で`session: false`を設定すると、アダプターにデフォルトのドライバーを提供しないように指示でき、プロジェクト全体でセッションを無効化できます。
+
+```js title="astro.config.mjs" ins={4}
+import { defineConfig } from 'astro/config';
+
+export default defineConfig({
+ session: false,
+});
+```
+
+通常はデフォルトのセッションドライバーを提供するアダプター(たとえば、[Node](/ja/guides/integrations-guide/node/#セッション)、[Cloudflare](/ja/guides/integrations-guide/cloudflare/#sessions)、[Netlify](/ja/guides/integrations-guide/netlify/#セッション)など)であっても、ドライバーを提供しないようになります。これは、バンドルサイズを小さくすることでコールドスタートを短縮できる、サーバーレスやエッジの実行環境において有用です。
+
## セッションデータの操作
[`session`オブジェクト](/ja/reference/api-reference/#session)を使用すれば、保存されたユーザー状態の操作(例: ショッピングカートへのアイテム追加)やセッションIDの操作(例: ログアウト時のセッションIDクッキーの削除)が可能です。このオブジェクトは、Astroコンポーネントやページでは`Astro.session`から、APIエンドポイント、ミドルウェア、アクションでは`context.session`からアクセスできます。
@@ -140,9 +180,11 @@ const cart = await Astro.session?.get('cart');
APIエンドポイントでは、`context`オブジェクトからセッションオブジェクトにアクセスできます。たとえば、ショッピングカートにアイテムを追加するには次のようにします。
```ts title="src/pages/api/addToCart.ts" "context.session"
+import type { APIContext } from "astro";
+
export async function POST(context: APIContext) {
const cart = await context.session?.get('cart') || [];
- const data = await context.request.json<{ item: string }>();
+ const data = await context.request.json();
if(!data?.item) {
return new Response('Item is required', { status: 400 });
}