cookies
cookies
は、Server Componentで HTTP の受信リクエストのクッキーを読み込み、Server Actions または Route Handlersで送信リクエストのクッキーを読み書きできる、非同期関数です。
app/page.tsx
import { cookies } from 'next/headers'
export default async function Page() {
const cookieStore = await cookies()
const theme = cookieStore.get('theme')
return '...'
}
リファレンス
メソッド
次のメソッドが利用可能です
メソッド | 戻り値の型 | 説明 |
---|---|---|
get('name') | Object | クッキー名を受け取り、名前と値を持つオブジェクトを返します。 |
getAll() | オブジェクトの配列 | 一致する名前のすべてのクッキーのリストを返します。 |
has('name') | Boolean | クッキー名を受け取り、クッキーが存在するかどうかに基づいてブール値を返します。 |
set(name, value, options) | - | クッキー名、値、オプションを受け取り、送信リクエストのクッキーを設定します。 |
delete(name) | - | クッキー名を受け取り、クッキーを削除します。 |
clear() | - | すべてのクッキーを削除します。 |
toString() | String | クッキーの文字列表現を返します。 |
オプション
クッキーを設定する際に、options
オブジェクトの次のプロパティがサポートされています
オプション | 型 | 説明 |
---|---|---|
name | String | クッキーの名前を指定します。 |
value | String | クッキーに格納する値を指定します。 |
expires | Date | クッキーが期限切れになる正確な日付を定義します。 |
maxAge | Number | クッキーの寿命を秒単位で設定します。 |
domain | String | クッキーが利用可能なドメインを指定します。 |
path | String | クッキーのスコープをドメイン内の特定のパスに制限します。 |
secure | Boolean, | セキュリティ向上のため、クッキーが HTTPS 接続でのみ送信されるようにします。 |
httpOnly | Boolean | クライアント側のアクセスを防ぎ、クッキーを HTTP リクエストに制限します。 |
sameSite | Boolean, 'lax' , 'strict' , 'none' | クッキーのクロスサイトリクエストの動作を制御します。 |
priority | String ("low" , "medium" , "high" ) | クッキーの優先度を指定します |
encode('value') | Function | クッキーの値をエンコードするために使用される関数を指定します。 |
partitioned | Boolean | クッキーが分割されているかどうかを示します。 |
これらのオプションの詳細については、MDN ドキュメントを参照してください。
知っておくと良いこと
cookies
は、プロミスを返す非同期関数です。クッキーにアクセスするには、async/await
または React のuse
関数を使用する必要があります。- バージョン 14 以前では、
cookies
は同期関数でした。下位互換性を保つため、Next.js 15 でも同期的にアクセスできますが、この動作は将来的に非推奨となる予定です。
- バージョン 14 以前では、
cookies
は 動的 API であり、その戻り値は事前に知ることができません。レイアウトまたはページで使用すると、ルートは動的レンダリングになります。.delete
メソッドは、以下の場合にのみ呼び出すことができます。- HTTP ではストリーミング開始後にクッキーを設定することが許可されていないため、サーバーアクションまたはルートハンドラー内で
.set
を使用する必要があります。
例
クッキーの取得
cookies().get('name')
メソッドを使用して、単一のクッキーを取得できます。
app/page.tsx
import { cookies } from 'next/headers'
export default async function Page() {
const cookieStore = await cookies()
const theme = cookieStore.get('theme')
return '...'
}
すべてのクッキーの取得
cookies().getAll()
メソッドを使用して、一致する名前を持つすべてのクッキーを取得できます。name
が指定されていない場合は、利用可能なすべてのクッキーを返します。
app/page.tsx
import { cookies } from 'next/headers'
export default async function Page() {
const cookieStore = await cookies()
return cookieStore.getAll().map((cookie) => (
<div key={cookie.name}>
<p>Name: {cookie.name}</p>
<p>Value: {cookie.value}</p>
</div>
))
}
クッキーの設定
サーバーアクションまたはルートハンドラーで cookies().set(name, value, options)
メソッドを使用してクッキーを設定できます。options
オブジェクトはオプションです。
app/actions.ts
'use server'
import { cookies } from 'next/headers'
export async function create(data) {
const cookieStore = await cookies()
cookieStore().set('name', 'lee')
// or
cookieStore().set('name', 'lee', { secure: true })
// or
cookieStore().set({
name: 'name',
value: 'lee',
httpOnly: true,
path: '/',
})
}
クッキーが存在するかどうかの確認
cookies().has(name)
メソッドを使用して、クッキーが存在するかどうかを確認できます。
app/page.ts
import { cookies } from 'next/headers'
export default async function Page() {
const cookieStore = await cookies()
const hasCookie = cookieStore.has('theme')
return '...'
}
クッキーの削除
クッキーを削除する方法は3つあります。
delete()
メソッドを使用する。
app/actions.ts
'use server'
import { cookies } from 'next/headers'
export async function delete(data) {
(await cookies()).delete('name')
}
同じ名前で空の値を持つ新しいクッキーを設定する。
app/actions.ts
'use server'
import { cookies } from 'next/headers'
export async function delete(data) {
(await cookies()).set('name', '')
}
maxAge
を 0 に設定すると、クッキーがすぐに期限切れになります。maxAge
は秒単位の値をを受け付けます。
app/actions.ts
'use server'
import { cookies } from 'next/headers'
export async function delete(data) {
(await cookies()).set('name', 'value', { maxAge: 0 })
}
バージョン履歴
バージョン | 変更点 |
---|---|
v15.0.0-RC | cookies が非同期関数になりました。codemod が利用可能です。 |
v13.0.0 | cookies が導入されました。 |
この情報は役に立ちましたか?