Spec-Zone.ru › Next.js

Куки

Функция 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API