Куки
Функция cookies позволяет считывать куки HTTP входящего запроса из компонента сервера или записывать исходящие куки запроса в действие сервера или обработчик маршрута.
Важно знать:
cookies()— это динамическая функция, значения которой нельзя узнать заранее. Использование её в макете или странице включит маршрут в динамическое отображение во время запроса.
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>Name: {cookie.name}</p>
<p>Value: {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()в действии сервера или обработчике маршрута.
'use server'
import { cookies } from 'next/headers'
async function create(data) {
cookies().set('name', 'lee')
// or
cookies().set('name', 'lee', { secure: true })
// or
cookies().set({
name: 'name',
value: 'lee',
httpOnly: true,
path: '/',
})
}Удаление куки
Важно знать: Куки можно удалять только в действии сервера или обработчике маршрута.
Существует несколько способов удаления куки:
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()доступно только в действии сервера или обработчике маршрута.
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 представлена. |
© 2024 Vercel, Inc.
Licensed under the MIT License.
https://nextjs.org/docs/app/api-reference/functions/cookies