Express Session 在使用 RedisStore 的生产环境中无法通过重定向持续存在

问题描述 投票:0回答:1

我正在构建一个 Web 应用程序,它使用会话存储来识别关键用户变量。在开发过程中,我使用默认的快速会话 MemoryStore 没有出现任何问题。在部署 Node.js 后端进行渲染后,我将存储方法从 MemoryStore 更改为 RedisStore。在开发过程中,会话存储仍然可以正常工作,但当尝试使用渲染部署的后端为我的前端提供服务时,会话不会通过重定向持续存在。

我已通过Redis云控制台验证会话正在初始化并存储在Redis中。此外,我可以在渲染日志中看到会话实际上是在重定向之前设置的。下面是我的一些代码。

“server.js”会话存储设置:

const redis = require('redis');
const connectRedis = require('connect-redis');
const app = express();

app.use(cors({origin: "http://localhost:5173", credentials: true}))

console.log("starting redis..")

const RedisStore = connectRedis(session);
const redisClient = redis.createClient({
  password: '******',
  legacyMode: true,
  socket: {
      host: '******',
      port: 15653
  }
});

app.use(cookie_parser());

app.use(session({
  store: new RedisStore({ client: redisClient }),
  secret: 'sparo-secret-1213nksdhk20hidfOKL',
  resave: false,
  saveUninitialized: false,
  proxy: true,
  cookie: {
      secure: false,
      httpOnly: false,
      maxAge: 3600000,
      sameSite: "none",
      expires: new Date(Date.now() + 3600000) 
  }
}))

redisClient.connect()

redisClient.on('connect', () => {
  console.log('Connected to Redis');
});

redisClient.on('error', (err) => {
  console.error('Redis error:', err);
});

渲染控制台日志

重定向之前的会话:

Session {
Jul 24 09:43:31 AM  cookie: {
Jul 24 09:43:31 AM    path: '/',
Jul 24 09:43:31 AM    _expires: 2024-07-24T14:42:51.367Z,
Jul 24 09:43:31 AM    originalMaxAge: 3560246,
Jul 24 09:43:31 AM    httpOnly: false,
Jul 24 09:43:31 AM    secure: false,
Jul 24 09:43:31 AM    sameSite: 'none'
Jul 24 09:43:31 AM  },
Jul 24 09:43:31 AM  sub: '******',
Jul 24 09:43:31 AM  name: '******',
Jul 24 09:43:31 AM  email: '******',
Jul 24 09:43:31 AM  refresh_token: '******',
Jul 24 09:43:31 AM  access_token: '******'
Jul 24 09:43:31 AM}

重定向后的会话:

Session {
Jul 24 09:43:32 AM  cookie: {
Jul 24 09:43:32 AM    path: '/',
Jul 24 09:43:32 AM    _expires: 2024-07-24T14:42:51.367Z,
Jul 24 09:43:32 AM    originalMaxAge: 3558480,
Jul 24 09:43:32 AM    httpOnly: false,
Jul 24 09:43:32 AM    secure: false,
Jul 24 09:43:32 AM    sameSite: 'none'
Jul 24 09:43:32 AM  }
Jul 24 09:43:32 AM}

我已经尝试了针对类似 StackOverflow 问题提出的所有解决方案来解决此会话持久性问题,但没有一个成功。我将不胜感激任何建议!

node.js redis session-cookies session-variables express-session
1个回答
0
投票

我也有同样的问题..

© www.soinside.com 2019 - 2024. All rights reserved.