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
. При наличии нескольких совпадений возвращает только первое.
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.
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.
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).
'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 по имени.
'use server'
import { cookies } from 'next/headers'
async function create(data) {
cookies().delete('name')
}
cookies().set(name, '')
Альтернативный вариант — установка cookie с тем же именем и пустым значением.
'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 недействительной.
'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 недействительной.
'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 . |