未从 mongodb 中完全删除快速会话条目
express-session entry not completely removed from mongodb
我在 nodeJS
应用程序中使用 express-session along with connect-mongodb-session 包来将会话存储在 mongodb 数据库中。
问题
当我尝试使用 req.session.destroy()
函数删除保存在数据库中的会话时,它会从保存在数据库中的会话条目中删除与用户相关的信息,但不会从数据库中完全删除会话条目数据库。
问题
我该如何解决这个问题?为什么会话条目完全从数据库中删除?
代码
const expressSession = require('express-session');
const MongoDbStore = require('connect-mongodb-session')(expressSession);
const sessionStore = new MongoDbStore({
uri: dbConnectionStr,
collection: 'sessions'
});
app.use(expressSession({
secret: 'sessionsecret',
resave: false,
saveUninitialized: false,
store: sessionStore
}));
调用 req.session.destroy
的代码
const logout = (req, res) => {
try {
// destroy session saved in db
req.session.destroy((error) => {
if (error) {
throw new Error('something went wrong while logging out')
}
res.redirect('/login');
});
} catch (error) {
res.status(400).send(utils.standardResponse('error', error.message));
}
};
对于可能遇到此问题的任何其他人,这里是解决方案
设置express-session
时,将unset
选项设置为destroy
app.use(session({
secret: process.env.EXPRESS_SESSION_SECRET,
resave: false,
saveUninitialized: false,
store: sessionStore,
unset: 'destroy' <--------
}));
然后在您的路由处理程序中,每当您想销毁会话存储中的会话条目时,只需将 req.session
设置为 null
const logout = (req, res) => {
req.session = null;
res.redirect('/login');
};
我在 nodeJS
应用程序中使用 express-session along with connect-mongodb-session 包来将会话存储在 mongodb 数据库中。
问题
当我尝试使用 req.session.destroy()
函数删除保存在数据库中的会话时,它会从保存在数据库中的会话条目中删除与用户相关的信息,但不会从数据库中完全删除会话条目数据库。
问题
我该如何解决这个问题?为什么会话条目完全从数据库中删除?
代码
const expressSession = require('express-session');
const MongoDbStore = require('connect-mongodb-session')(expressSession);
const sessionStore = new MongoDbStore({
uri: dbConnectionStr,
collection: 'sessions'
});
app.use(expressSession({
secret: 'sessionsecret',
resave: false,
saveUninitialized: false,
store: sessionStore
}));
调用 req.session.destroy
的代码
const logout = (req, res) => {
try {
// destroy session saved in db
req.session.destroy((error) => {
if (error) {
throw new Error('something went wrong while logging out')
}
res.redirect('/login');
});
} catch (error) {
res.status(400).send(utils.standardResponse('error', error.message));
}
};
对于可能遇到此问题的任何其他人,这里是解决方案
设置express-session
时,将unset
选项设置为destroy
app.use(session({
secret: process.env.EXPRESS_SESSION_SECRET,
resave: false,
saveUninitialized: false,
store: sessionStore,
unset: 'destroy' <--------
}));
然后在您的路由处理程序中,每当您想销毁会话存储中的会话条目时,只需将 req.session
设置为 null
const logout = (req, res) => {
req.session = null;
res.redirect('/login');
};