📅  最后修改于: 2023-12-03 14:41:04.793000             🧑  作者: Mango
Express-Session 是一个用于处理 session 的 Node.js 应用程序中间件。它为Express服务器提供会话支持,使得使用服务器上的会话变得非常容易。
在使用 Express-Session 时,建议不要使用未定义的重新保存选项,否则会提示上述警告信息。为了解决这个问题,Express-Session 提供了重新保存选项。
重新保存选项是一种控制 session 如何在响应结束时被保存的选项。如果设置重新保存选项为 true
,那么 session 会在响应结束时被自动保存。如果设置为 false
,那么 session 不会在响应结束时被自动保存,而是需要手动调用 session.save()
来保存。
以下是使用重新保存选项的示例代码:
const express = require('express');
const session = require('express-session');
const app = express();
app.use(session({
secret: 'my-secret',
resave: true,
saveUninitialized: true
}));
// 设置重新保存选项为 true
app.use((req, res, next) => {
req.session.example = 'example';
req.session.save(err => {
if (err) {
console.error(err);
}
next();
});
});
app.get('/', (req, res) => {
res.send(`Session example: ${req.session.example}`);
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
在上述示例代码中,我们通过 resave
选项设置重新保存为 true
,随后在中间件中手动保存 session,保证了 session 在响应结束时被自动保存。
在使用 Express-Session 时,如果不使用重新保存选项,且在 session 内容发生改变时没有手动调用 session.save()
,那么 session 会在响应结束时被自动保存。但该行为并不总是正确的,因此,建议至少设置重新保存选项为 false
,然后手动保存 session。
同时,在很多情况下,我们可能需要在将 session 保存到存储后,将其从内存中删除。为了实现这一点,可以在调用 session.save()
后,手动调用 session.destroy()
来销毁 session。