cookies函数允许您从一个Server Component读取HTTP传入请求的cookies,或者在Server Action或Route Handler中写入传出请求的cookies。
须知:
cookies()是一个**动态函数,其返回值无法提前知晓。在布局或页面中使用它将使路由在请求时选择动态渲染**。
cookies().get(name)
一个方法,它接受一个cookie名称并返回一个包含名称和值的对象。如果没有找到名为name的cookie,它返回undefined。如果多个cookie匹配,它只会返回第一个匹配项。
jsx
import { cookies } from 'next/headers'
export default function Page() {
const cookieStore = cookies()
const theme = cookieStore.get('theme')
return '...'
}cookies().getAll()
一个类似于get的方法,但它返回所有匹配name的cookie列表。如果未指定name,则返回所有可用的cookie。
jsx
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)
一个方法,它接受一个cookie名称并返回一个boolean,根据cookie是否存在(true)或不存在(false)。
jsx
import { cookies } from 'next/headers'
export default function Page() {
const cookieStore = cookies()
const hasCookie = cookieStore.has('theme')
return '...'
}cookies().set(name, value, options)
一个方法,它接受一个cookie名称、值和选项,并设置传出请求的cookie。
须知:HTTP不允许在开始流式传输后设置cookie,因此您必须在Server Action或Route Handler中使用
.set()。
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 有几种选项:
cookies().delete(name)
您可以显式删除给定名称的 Cookies。
js
'use server'
import { cookies } from 'next/headers'
async function delete(data) {
cookies().delete('name')
}cookies().set(name, '')
或者,您可以设置一个同名的新 Cookies,值为空。
js
'use server'
import { cookies } from 'next/headers'
async function delete(data) {
cookies().set('name', '')
}cookies().set(name, value, { maxAge: 0 })
将 maxAge 设置为 0 将立即过期 Cookies。
js
'use server'
import { cookies } from 'next/headers'
async function delete(data) {
cookies().set('name', 'value', { maxAge: 0 })
}cookies().set(name, value, { expires: timestamp })
将 expires 设置为过去的任何值将立即过期 Cookies。
js
'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()操作的相同域中的 Cookies。此外,代码必须在与您想要删除的 Cookies 相同的协议(HTTP 或 HTTPS)上执行。
版本历史
| 版本 | 变更 |
|---|---|
v13.0.0 | 引入了 cookies。 |