所以我正在运行一个node.js后端与react前端,并且由于某种原因与此设置:
app.use(session({
store: new MongoStore({
mongooseConnection: mongoose.connection
}),
secret: process.env.SECRET_KEY,
resave: false,
saveUninitialized: false,
cookie: {
maxAge: 1000 * 60 * 60 * 24 * 7 * 2, // two weeks
secure: false,
httpOnly: false,
}
}));
保存用户名使用:req.session.username = username;这确实保存,但当我试图在另一个页面上检查会话时,用户名就不见了。
完整源代码:https://github.com/CTF-Cafe/CTF_Cafe/tree/master/backEnd
PS:它在生产中完全可以工作,但在本地我尝试了httponly false和secure false。没有变化。
感谢任何帮助
当你从你的后端服务你的前端会话将工作,因为它有相同的起源。但是,对于您的本地环境,您将在不同的端口上运行React应用程序,Express应用程序也将不同。当一个端口不同时,它已经被认为是不同的来源和cookie,会话将不会被共享。
你可以通过节点应用代理你的前端,这样你就可以有相同的起源,你的会话将保持。
const proxy = require('express-http-proxy');
const app = express();
...
// Add after your routes
app.use(proxy('http://127.0.0.1:3000')); // assuming your Reacts runs on P3000
也检查一下这个答案。