You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SvelteKit版本迁移:session及GetSession的新引用方式咨询

SvelteKit迁移后Session的正确使用方式

SvelteKit最新版本已移除内置的session store及相关的GetSession类型,替代方案如下:

1. 服务端处理(hooks & server load)

原来的hooks.ts需改为**hooks.server.ts**,直接在handle中将session挂载到event.locals:

import type { Handle } from '@sveltejs/kit';

export const handle: Handle = async ({ event, resolve }) => {
  // 替换为你实际的session获取逻辑(比如从cookie、数据库读取)
  const session = await yourSessionFetchLogic(event.cookies.get('session_id'));
  
  // 将session挂载到locals,供server组件调用
  event.locals.session = session;

  return resolve(event);
};

在根+layout.server.ts中,通过locals获取session并传递给前端的page.data:

import type { LayoutServerLoad } from './$types';

export const load: LayoutServerLoad = async ({ locals }) => {
  return {
    session: locals.session
  };
};

2. 前端组件中使用

在+layout.svelte或+page.svelte中,通过page store访问session:

<script lang="ts">
  import { page } from '$app/stores';
</script>

{#if $page.data.session}
  <div>当前用户:{$page.data.session.user.name}</div>
{:else}
  <div>未登录</div>
{/if}

3. 全局响应式session(可选)

如果需要在非页面组件中全局使用响应式session,可以自定义store:

// src/lib/stores/session.ts
import { writable } from 'svelte/store';
import type { PageData } from '../$types';

export const session = writable<PageData['session'] | null>(null);

在根+layout.svelte中同步page.data到自定义store:

<script lang="ts">
  import { page } from '$app/stores';
  import { session } from '$lib/stores/session';

  // 自动同步page.data中的session到全局store
  $: $session = $page.data.session;
</script>

内容的提问来源于stack exchange,提问作者Ben Quan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 04:48:29