跳至主要内容

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.getcookies.set 的选项对应于 cookieparseserialize 选项文档。SvelteKit 设置以下默认值以提高 Cookie 的安全性

{
	httpOnly: true,
	secure: true,
	sameSite: 'lax'
}

在 GitHub 上编辑此页面

上一个 下一个
1
2
3
4
5
<script>
	let { data } = $props();
</script>
 
<h1>Hello {data.visited ? 'friend' : 'stranger'}!</h1>