setHeaders
函数不能用于设置 Set-Cookie
头。相反,你应该使用 cookies
API。
在你的 load
函数中,你可以通过 cookies.get(name, options)
读取 cookie:
src/routes/+page.server
export function load({ cookies }) {
const visited = cookies.get('visited');
return {
visited: visited === 'true'
};
}
要设置 cookie,使用 cookies.set(name, value, options)
。强烈建议在设置 cookie 时明确配置 path
,因为浏览器的默认行为是将 cookie 设置在当前路径的父路径上,这种行为有些无用。
src/routes/+page.server
export function load({ cookies }) {
const visited = cookies.get('visited');
cookies.set('visited', 'true', { path: '/' });
return {
visited: visited === 'true'
};
}
现在,如果你重新加载 iframe,Hello stranger!
将变成 Hello friend!
。
调用 cookies.set(name, ...)
会写入一个 Set-Cookie
头,同时也会更新内部的 cookie 映射,这意味着在同一个请求期间后续对 cookies.get(name)
的调用将返回更新后的值。在底层,cookies
API 使用了流行的 cookie
包 —— 传递给 cookies.get
和 cookies.set
的选项对应于 cookie
文档中的 parse
和 serialize
选项。SvelteKit 设置了以下默认值以使你的 cookie 更安全:
{
httpOnly: true,
secure: true,
sameSite: 'lax'
}
1
2
3
4
5
<script>
let { data } = $props();
</script>
<h1>Hello {data.visited ? 'friend' : 'stranger'}!</h1>