cookies

Функция cookies позволяет читать cookies входящего HTTP-запроса в Серверном Компоненте (Server Component) или записывать исходящие cookies в Серверном Действии (Server Action) или Обработчике Маршрута (Route Handler).

Важно знать: cookies() — это Динамическая Функция (Dynamic Function), возвращаемые значения которой невозможно предсказать заранее. Её использование в layout или page переведёт маршрут в режим динамического рендеринга (dynamic rendering) во время запроса.

cookies().get(name)

Метод, принимающий имя cookie и возвращающий объект с именем и значением. Если cookie с указанным name не найден, возвращает undefined. При наличии нескольких совпадений возвращает только первое.

app/page.js
import { cookies } from 'next/headers'

export default function Page() {
  const cookieStore = cookies()
  const theme = cookieStore.get('theme')
  return '...'
}

cookies().getAll()

Метод, аналогичный get, но возвращающий список всех cookies с совпадающим name. Если name не указан, возвращает все доступные cookies.

app/page.js
import { cookies } from 'next/headers'

export default function Page() {
  const cookieStore = cookies()
  return cookieStore.getAll().map((cookie) => (
    <div key={cookie.name}>
      <p>Name: {cookie.name}</p>
      <p>Value: {cookie.value}</p>
    </div>
  ))
}

cookies().has(name)

Метод, принимающий имя cookie и возвращающий boolean в зависимости от наличия (true) или отсутствия (false) cookie.

app/page.js
import { cookies } from 'next/headers'

export default function Page() {
  const cookiesList = cookies()
  const hasCookie = cookiesList.has('theme')
  return '...'
}

cookies().set(name, value, options)

Метод, принимающий имя cookie, значение и параметры, и устанавливающий исходящий cookie.

Важно знать: HTTP не позволяет устанавливать cookies после начала потоковой передачи, поэтому .set() можно использовать только в Серверном Действии (Server Action) или Обработчике Маршрута (Route Handler).

app/actions.js
'use server'

import { cookies } from 'next/headers'

async function create(data) {
  cookies().set('name', 'lee')
  // или
  cookies().set('name', 'lee', { secure: true })
  // или
  cookies().set({
    name: 'name',
    value: 'lee',
    httpOnly: true,
    path: '/',
  })
}

Удаление cookies

Важно знать: Удалять cookies можно только в Серверном Действии (Server Action) или Обработчике Маршрута (Route Handler).

Есть несколько способов удалить cookie:

cookies().delete(name)

Явное удаление cookie по имени.

app/actions.js
'use server'

import { cookies } from 'next/headers'

async function create(data) {
  cookies().delete('name')
}

cookies().set(name, '')

Альтернативный вариант — установка cookie с тем же именем и пустым значением.

app/actions.js
'use server'

import { cookies } from 'next/headers'

async function create(data) {
  cookies().set('name', '')
}

Важно знать: .set() доступен только в Серверном Действии (Server Action) или Обработчике Маршрута (Route Handler).

cookies().set(name, value, { maxAge: 0 })

Установка maxAge в 0 немедленно сделает cookie недействительной.

app/actions.js
'use server'

import { cookies } from 'next/headers'

async function create(data) {
  cookies().set('name', 'value', { maxAge: 0 })
}

cookies().set(name, value, { expires: timestamp })

Установка expires на любое прошедшее время немедленно сделает cookie недействительной.

app/actions.js
'use server'

import { cookies } from 'next/headers'

async function create(data) {
  const oneDay = 24 * 60 * 60 * 1000
  cookies().set('name', 'value', { expires: Date.now() - oneDay })
}

Важно знать: Можно удалять только cookies, принадлежащие тому же домену, из которого вызывается .set(). Кроме того, код должен выполняться по тому же протоколу (HTTP или HTTPS), что и cookie, которую нужно удалить.

История версий

ВерсияИзменения
v13.0.0Добавлена функция cookies.