Session 使用Elasticache的Elastic Beanstalk上未收到cookie

Session 使用Elasticache的Elastic Beanstalk上未收到cookie,session,cookies,redis,amazon-elastic-beanstalk,amazon-elasticache,Session,Cookies,Redis,Amazon Elastic Beanstalk,Amazon Elasticache,问题: 在elastic beanstalk上登录到部署的节点应用程序后,我从未收到cookie,每当我通过浏览器刷新页面时,我都会注销 以下是我的快速会话设置: app.use(session({ store: new RedisStore({ client: redisClient, host: process.env.REDIS_HOST, port: process.env.REDIS_PORT }), secret: proc

问题:

在elastic beanstalk上登录到部署的节点应用程序后,我从未收到cookie,每当我通过浏览器刷新页面时,我都会注销

以下是我的快速会话设置:

app.use(session({
    store: new RedisStore({
      client: redisClient,
      host: process.env.REDIS_HOST,
      port: process.env.REDIS_PORT
    }),
    secret: process.env.SESSION_SECRET,
    resave: false,
    saveUninitialized: false // No cookie received until successful login
}));
正在开发中(登录后):

生产中(登录后):

因此,虽然我能够“登录”,但我无法通过刷新进行持久会话,因为从来没有发送回cookie

我排除了可能的原因:

  • Elasticache:我已经用redis设置了一个Elasticache实例

  • 安全组:我已将其入站安全组配置为接受来自elastic beanstalk安全组的传入TCP连接。我甚至通过使用ssh连接beanstalk、安装redis cli并成功连接到主端点来测试这一点

  • 负载均衡器:我的elastic beanstalk实例目前是一个单节点,不使用负载平衡,但即使使用应用程序控制的粘性会话负载平衡,结果也是一样的


你们知道会出什么问题吗?

问题出在我的配置中:

将“客户机”作为“新Redistore”中的密钥覆盖同级“主机”和“端口”密钥

正确的配置如下所示:

const redisClient = redis.createClient({
  host: process.env.REDIS_HOST,
  port: process.env.REDIS_PORT
});

app.use(session({
  store: new RedisStore({
    client: redisClient
  }),
  secret: process.env.SESSION_SECRET,
  resave: false,
  saveUninitialized: false
}));

问题出现在我的配置中:

将“客户机”作为“新Redistore”中的密钥覆盖同级“主机”和“端口”密钥

正确的配置如下所示:

const redisClient = redis.createClient({
  host: process.env.REDIS_HOST,
  port: process.env.REDIS_PORT
});

app.use(session({
  store: new RedisStore({
    client: redisClient
  }),
  secret: process.env.SESSION_SECRET,
  resave: false,
  saveUninitialized: false
}));