我有一个Express 4应用程序设置来进行会话。
// Sessions
app.use(cookieParser());
app.use(session({ secret: "some-secret" }));
// Signup
app.post("/signup", function (req, res) {
create_user(req.body.user, function (err, user_id) {
req.session.user_id = user_id;
res.redirect("/admin");
});
});
当我提交表单时,它会将user_id保存到req.session。但是,当我重新启动服务器时,会话就消失了。
为什么它不持久?我错过了一些配置吗?
答案 0 :(得分:46)
快速会话的默认会话存储是MemoryStore,顾名思义,它仅将会话存储在内存中。如果您需要持久性,Express可以使用许多会话存储。一些例子:
答案 1 :(得分:0)
@mscdex答案很好,但是如果您正在寻找代码示例。这是带有connect-mongo的一个,如果您使用mongodb和mongoose,它应该可以正常工作。
安装软件包:
npm i connect-mongo
需要包装:
const session = require('express-session'); // You must have express-sessions installed
const MongoStore = require('connect-mongo')(session)
现在配置会话:
app.use(
session({
secret: "mysecrets",
resave: false,
saveUninitialized: false,
store: new MongoStore({
mongooseConnection: mongoose.connection,
ttl: 14 * 24 * 60 * 60
}),
})
);
再次假设您使用猫鼬并配置了连接。
如果您做对了所有事情,它应该可以正常工作。