Express-session 在每次页面加载时创建一个新会话
Express-session creates a new session every page load
我有一个带有 express-session
的 MERN 网络应用程序,我正在尝试将其部署到 heroku。我通过在 package.json
文件中设置代理来使用代理配置后端请求。当前端和后端都在 localhost
.
本地 运行 时,它可以正常工作
当我将后端部署到 heroku 时,每次浏览器刷新后,express-session 都会在 mongodb.
中创建一个新的 session/document
经过大量调试后,发现是将 axios.defaults.baseURL
设置为后端 url 导致了问题。 (我仍然不知道为什么。)
显然,在 package.json
中设置代理仅适用于开发,因为当我部署应用程序时,api 会从前端 url 调用。所以在开发过程中,当一切都在 localhost 上 运行,并且在 package.json
中设置代理时,那么一切正常。
问题是,当我设置axios.defaults.baseURL
时。当我这样做时,每次重新加载页面后,都会重新创建会话。
前端与后端的正确连接方式是什么?
Session.js
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
const mongoose = require('mongoose');
module.exports = function(app) {
var sess = {
secret: 'mySecret',
cookie: { token: null },
saveUninitialized: false,
resave: true,
store: new MongoStore({ mongooseConnection: mongoose.connection })
};
if (app.get('env') === 'production') {
app.set('trust proxy', 1);
sess.cookie.secure = true;
}
app.use(session(sess));
};
Route.js
module.exports = function(app) {
app.use(cors());
app.use(helmet());
require('../middleware/session')(app);
// Other routes...
};
express-session
的工作方式是在本地保存一个引用 cookie,当您发送请求时,无论是获取、post、放置还是删除,该请求都会发送该 cookie ref 连同对后端的请求。 Express-session
然后看到 cookie 引用,从数据存储中获取相应的数据,以便您可以在您的应用程序中使用它。
设置 axios.defaults.baseURL
时,cookie 不会从本地系统发送到后端。发送方式,设置为:
axios.defaults.withCredentials = true;
这可以确保 cookie 被发送过来。一旦你设置了它,那么你将不得不使用 CORS 设置一个特定的 origin
,并且你不能使用 '*'
.
我有一个带有 express-session
的 MERN 网络应用程序,我正在尝试将其部署到 heroku。我通过在 package.json
文件中设置代理来使用代理配置后端请求。当前端和后端都在 localhost
.
当我将后端部署到 heroku 时,每次浏览器刷新后,express-session 都会在 mongodb.
中创建一个新的 session/document经过大量调试后,发现是将 axios.defaults.baseURL
设置为后端 url 导致了问题。 (我仍然不知道为什么。)
显然,在 package.json
中设置代理仅适用于开发,因为当我部署应用程序时,api 会从前端 url 调用。所以在开发过程中,当一切都在 localhost 上 运行,并且在 package.json
中设置代理时,那么一切正常。
问题是,当我设置axios.defaults.baseURL
时。当我这样做时,每次重新加载页面后,都会重新创建会话。
前端与后端的正确连接方式是什么?
Session.js
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
const mongoose = require('mongoose');
module.exports = function(app) {
var sess = {
secret: 'mySecret',
cookie: { token: null },
saveUninitialized: false,
resave: true,
store: new MongoStore({ mongooseConnection: mongoose.connection })
};
if (app.get('env') === 'production') {
app.set('trust proxy', 1);
sess.cookie.secure = true;
}
app.use(session(sess));
};
Route.js
module.exports = function(app) {
app.use(cors());
app.use(helmet());
require('../middleware/session')(app);
// Other routes...
};
express-session
的工作方式是在本地保存一个引用 cookie,当您发送请求时,无论是获取、post、放置还是删除,该请求都会发送该 cookie ref 连同对后端的请求。 Express-session
然后看到 cookie 引用,从数据存储中获取相应的数据,以便您可以在您的应用程序中使用它。
设置 axios.defaults.baseURL
时,cookie 不会从本地系统发送到后端。发送方式,设置为:
axios.defaults.withCredentials = true;
这可以确保 cookie 被发送过来。一旦你设置了它,那么你将不得不使用 CORS 设置一个特定的 origin
,并且你不能使用 '*'
.