标题不言自明:从某一刻到另一刻,我无法从我的 Sveltekit 项目的服务器页面设置 cookie。
在我的页面的 +page.server.js 中,我有一个使用
set
函数设置 cookie 的操作。之后,当重新加载页面时,我尝试使用 get
函数内的 load
函数检索 cookie,但 cookie 未定义。我非常确信它根本没有设置,但我不知道为什么。
export const load = async ({ cookies }) => {
const myCookie = cookies.get('myCookie');
}
export const actions = {
default: async ({ cookies }) => {
//stuff
cookies.set('myCookie', true);
throw redirect(303, '/');
}
}
我指定这是我已经在其他项目中完成的程序并且它一直有效。可能是什么问题?谢谢您的帮助。
更新:
我不知道它是否有帮助,但我想指定我正在使用 Pocketbase,并且在项目的 hook.server.js 中设置了 cookie,我可以在浏览器中看到它并正常工作:
export async function handle({ event, resolve }) {
event.locals.pb = new PocketBase('http://127.0.0.1:8090');
event.locals.pb.authStore.loadFromCookie(event.request.headers.get('cookie') || '');
if (event.locals.pb.authStore.isValid) {
event.locals.user = serializeNonPOJOs(event.locals.pb.authStore.model);
} else {
event.locals.user = undefined;
}
const response = await resolve(event, {
transformPageChunk: ({ html }) => minify(html, minification_options)
})
response.headers.set('set-cookie', event.locals.pb.authStore.exportToCookie({ secure: false }));
return response
}
对我有用的是添加 const isDataRequest = event.route.id == null; if (isDataRequest) 返回解析(事件); 如果是 SSR 请求,则阻止设置 cookie。