我正在构建一个 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 问题提出的所有解决方案来解决此会话持久性问题,但没有一个成功。我将不胜感激任何建议!
我也有同样的问题..