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

express-session+Apollo技术栈刷新后session查询失效问题求助

排查方案

1. 检查Apollo Client请求配置

  • 客户端默认不会自动携带Cookie,需在创建ApolloClient时明确配置credentials:
    const client = new ApolloClient({
      uri: '/graphql',
      credentials: 'include', // 跨域场景用这个,同域也可兼容
      cache: new InMemoryCache(),
    });
    
  • 若单独配置了HttpLink,同样要加上该选项:
    const link = new HttpLink({
      uri: '/graphql',
      credentials: 'include',
    });
    

2. 校验express-session配置

  • 重点检查cookie相关参数:
    • 开发环境(HTTP)下secure必须设为false,否则浏览器会拒绝发送Cookie;生产环境(HTTPS)设为true
    • sameSite若设为Strict,跨域场景可能引发问题,开发阶段可先设为Lax或None(设None需配合secure: true)
      示例配置:
    app.use(session({
      secret: 'your-secret-key',
      resave: false,
      saveUninitialized: false,
      store: new MongoDBStore({ uri: 'mongodb://localhost:27017/sessions' }),
      cookie: {
        maxAge: 1000 * 60 * 60 * 24,
        httpOnly: true,
        secure: process.env.NODE_ENV === 'production',
        sameSite: process.env.NODE_ENV === 'production' ? 'Lax' : 'None',
      },
    }));
    
  • 确认saveUninitialized设为false,避免创建空session干扰验证逻辑

3. 检查ItIsMe查询的Resolver与上下文配置

  • 确保Resolver从req.session正确取用户信息:
    const resolvers = {
      Query: {
        ItIsMe: (_, __, { req }) => {
          return req.session.user || null;
        },
      },
    };
    
  • 验证Apollo Server上下文是否传递了req对象:
    const server = new ApolloServer({
      typeDefs,
      resolvers,
      context: ({ req }) => ({ req }),
    });
    

4. 跨域场景下的CORS配置校验

  • 若前后端域名不同,express需配置CORS允许携带凭证:
    const cors = require('cors');
    app.use(cors({
      origin: 'http://your-frontend-domain.com', // 必须指定具体前端域名,不能用*
      credentials: true,
    }));
    

5. 浏览器请求Cookie验证

  • 打开浏览器开发者工具(F12)→ Network标签,刷新页面后查看GraphQL请求的Request Headers:
    • 确认是否存在Cookie字段,且值与登录后的session ID一致
    • 若无Cookie字段,回到第一步检查客户端配置;若有,后端需打印req.session.user日志,确认session存储(connect-mongodb-session连接、数据库session文档)是否正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:05:23