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>