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 。 |