我在express-session上遇到问题,我在mysql上存储了我的会话,可以正常工作:
app.use(
session({
store: new MySQLStore({ createDatabaseTable: true }, bdd),
secret: process.env.COOKIE_SECRET,
cookie: { secure: false, maxAge: 30 * 24 * 60 * 60 * 1000 },
resave: false,
saveUninitialized: false
})
);
此后,在用户登录时,我验证登录信息(可以正常工作),并使用一些已初始化的变量创建会话:
if (isGoodPass) {
// pass ok, init session values
req.session.userid = bdduser.id;
req.session.email = requser.email;
req.session.pseudo = bdduser.pseudo;
console.log("logid : ", req.session.id);
res.status(200).send("oui");
}
else res.status(404).send("non");
那也可以。会话已很好地存储在数据库中,值已初始化,确定。 之后,我使用以下路由测试会话:
app.get("/bla", (req, res) => {
res.setHeader("Content-Type", "text/plain");
if (req.session == null) {
console.log("pas de session");
res.status(200).send("pas de session");
} else {
console.log("sessid :", req.session.id);
res.status(200).send("id :" + req.session.userid);
}
});
问题来了,我的反应代码这样调用/ bla路由:
const response = await axios.get("http://localhost:8080/bla", {
withCredentials: true
});
并且在服务器中启用了cors:
app.use(
cors({
origin: "http://localhost:3000", // my react domain
credentials: true
})
);
例如,当我登录服务器时,打印会话的会话ID,相同的会话ID会很好地存储在数据库中。但是,当我调用/ bla路由时,服务器会打印另一个会话ID(似乎他无法从客户端请求中获取cookie),并且每次我调用/ bla时都会打印一个新的会话ID。我已经查看了所有相关主题,打开了凭据等等,但是那没用。
谢谢您的时间。