cookies
Функция cookies
позволяет читать входящие HTTP-куки в Серверном Компоненте (Server Component) или записывать исходящие куки в Серверном Действии (Server Action) или Обработчике Маршрута (Route Handler).
Важно знать:
cookies()
— это Динамическая Функция (Dynamic Function), возвращаемые значения которой невозможно предсказать заранее. Использование в layout или page переведёт маршрут в режим динамического рендеринга (dynamic rendering) во время запроса.
cookies().get(name)
Метод, принимающий имя куки и возвращающий объект с именем и значением. Если куки с указанным name
не найдены, возвращает undefined
. При наличии нескольких совпадений вернёт только первое.
import { cookies } from 'next/headers'
export default function Page() {
const cookieStore = cookies()
const theme = cookieStore.get('theme')
return '...'
}
cookies().getAll()
Метод, аналогичный get
, но возвращающий список всех куки с совпадающим name
. Если name
не указан, возвращает все доступные куки.
import { cookies } from 'next/headers'
export default function Page() {
const cookieStore = cookies()
return cookieStore.getAll().map((cookie) => (
<div key={cookie.name}>
<p>Имя: {cookie.name}</p>
<p>Значение: {cookie.value}</p>
</div>
))
}
cookies().has(name)
Метод, принимающий имя куки и возвращающий boolean
в зависимости от наличия (true
) или отсутствия (false
) куки.
import { cookies } from 'next/headers'
export default function Page() {
const cookieStore = cookies()
const hasCookie = cookieStore.has('theme')
return '...'
}
cookies().set(name, value, options)
Метод, принимающий имя куки, значение и параметры, и устанавливающий исходящий куки.
Важно знать: HTTP не позволяет устанавливать куки после начала потоковой передачи, поэтому
.set()
можно использовать только в Серверном Действии (Server Action) или Обработчике Маршрута (Route Handler).
'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: '/',
})
}
Удаление куки
Важно знать: Удалять куки можно только в Серверном Действии (Server Action) или Обработчике Маршрута (Route Handler).
Существует несколько способов удаления куки:
cookies().delete(name)
Явное удаление куки по имени.
'use server'
import { cookies } from 'next/headers'
async function delete(data) {
cookies().delete('name')
}
cookies().set(name, '')
Альтернативный способ — установка нового куки с тем же именем и пустым значением.
'use server'
import { cookies } from 'next/headers'
async function delete(data) {
cookies().set('name', '')
}
Важно знать:
.set()
доступен только в Серверном Действии (Server Action) или Обработчике Маршрута (Route Handler).
cookies().set(name, value, { maxAge: 0 })
Установка maxAge
в 0 немедленно сделает куки недействительным.
'use server'
import { cookies } from 'next/headers'
async function delete(data) {
cookies().set('name', 'value', { maxAge: 0 })
}
cookies().set(name, value, { expires: timestamp })
Установка expires
на любое прошедшее время немедленно сделает куки недействительным.
'use server'
import { cookies } from 'next/headers'
async function delete(data) {
const oneDay = 24 * 60 * 60 * 1000
cookies().set('name', 'value', { expires: Date.now() - oneDay })
}
Важно знать: Можно удалять только куки, принадлежащие тому же домену, из которого вызывается
.set()
. Кроме того, код должен выполняться по тому же протоколу (HTTP или HTTPS), что и удаляемый куки.
История версий
Версия | Изменения |
---|---|
v13.0.0 | Добавлена функция cookies . |