跳至主要內容

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 的選項對應於 cookie 文件中的 parseserialize 選項。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>