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

Strapi(Koa)会话无法正常使用,求助排查问题

问题分析与解决

核心问题1:错误的Session赋值方式

你直接通过context.session = context.state.user替换整个session对象的方式是错误的。Strapi的session是特殊实例,需通过修改属性或set方法存储数据,而非直接覆盖对象。

正确写法二选一:

// 方式1:直接设置属性
context.session.user = context.state.user;

// 方式2:使用set方法
context.session.set('user', context.state.user);

核心问题2:未启用CookieParser中间件

你的config/middleware.ts中注释了cookieParser配置,但Strapi的session中间件依赖它解析Cookie中的会话标识,必须启用:

export default ({ env }) => ({
    settings: {
        session: {
            enabled: true,
            client: 'cookie',
            key: 'strapi.sid',
            prefix: 'strapi:sess:',
            secretKeys: env.array('APP_KEYS'),
            httpOnly: true,
            maxAge: 24 * 60 * 60 * 1000, // 24 hours
            overwrite: true,
            signed: false,
            rolling: false
        },
        cookieParser: {
            enabled: true
        }
    }
})

额外检查点

  • 确认APP_KEYS环境变量已正确配置,Strapi依赖它签名、验证会话数据。
  • 若使用GraphQL(从resolver结构判断大概率是),需保证session中间件在graphql之前执行。可在config/middleware.ts的list数组中调整顺序,确保会话能在resolver中被正确访问修改。

修改后的Resolver示例:

import { Strapi } from '@strapi/strapi'

export default ({ strapi }: { strapi: Strapi }) => ({
    search: {
        resolve: async (obj, { name }, context) => {
            console.log(context.session, context.state.user)
            // 正确设置session数据
            context.session.user = context.state.user;
            return await strapi.service('api::printful.product').search({ name })
        }
    }
})

修改完成后重启Strapi服务,再测试请求,会话数据即可在后续请求中正常读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 07:53:25