设置 我在本地运行两个 docker 容器。一个 Express 后端和一个 next.js 前端。我的数据库位于远程服务器上。
后端片段:
const corsOptions = {
origin: '*',
credentials: true,
};
app.use(cors(corsOptions));
app.use(express.static("public"));
app.use(express.json()); // lets us interpret(parse) post requests and returns an Object
app.use(express.urlencoded({ extended: true }));
// import (own) database config
const database = require("./database");
// session middleware
const session = require('express-session');
const MySQLStore = require('express-mysql-session')(session);
const sessionStore = new MySQLStore({}, database);
sessionStore.all(function(error, sessions) {
console.log('all sessions:', sessions);
});
// setting up session middleware
app.use(session({
secret: 'asdasdcads',
createDatabaseTable: true,
store: sessionStore,
resave: false,
saveUninitialized: false,
expiration: 600000,
cookie: {
sameSite: 'lax',
domain: 'localhost'
},
secure: false
}));
当我在 localhost:80(映射为 80:3000 的 Docker 容器)中打开站点时,会使用 ID 创建会话,并且当 saveUninitialized 设置为 true 时,会话甚至会存储在我的数据库中。最后一步,在浏览器中设置cookie失败。相反,如果我刷新站点,则会创建一个新会话。 我猜会话中间件没有在响应中添加 Set-Cookie,但我真的想知道为什么以及如何更深入地研究它。我询问了 chatGPT 并向 cookie 和会话配置添加了一堆内容以使其正常工作,如您所见,但没有成功。 ChatGPT 还建议在会话后设置 cors,但后来又恢复了。
我也遇到同样的问题,请问你解决了吗?