我使用express和redis来保持会话在我的系统上运行。我在sessionCookie上设置maxAge时遇到一些问题。默认情况下,我读到的是24小时,但是很长时间才能保持这种状态。我想设置为30分钟,然后注销用户,我改变了1分钟,看看它是否有效,但没有任何反应,用户仍然记录。
这是我的会话功能:
module.exports.initSession = function(app, db) {
app.use(session({
saveUninitialized: true,
resave: false,
secret: config.sessionSecret,
cookie: {
maxAge: 30*10000,
httpOnly: true,
secure: Boolean(process.env.ssl) || true
},
key: config.sessionKey,
store: new RedisStore({
host: config.redis.host || 'localhost',
port: config.redis.port || 6379,
db: config.redis.database || 0,
pass: config.redis.password || ''
})
}));
};
我也尝试使用ttl而不是maxAge,但我得到了相同的结果。它可能是什么?
编辑:
我使用SEAN.JS,会话内容的文件是这两个: express.js和default环境。
答案 0 :(得分:4)
这是我对会话的配置,它有效 为测试目的,我将到期时间设置为5秒。
app.use(session({
store: new redisStore({
host: 'localhost',
port: 6379,
client: redisClient,
ttl: 5 // in seconds
}),
secret: 'this is secret',
resave: false,
saveUninitialized: true,
// cookie: {maxAge: 5000}
}));
我设置maxAge
但它不起作用,当我设置ttl
时它起作用了。
注意:我测试过并发现ttl
位于秒,但maxAge以毫秒为单位! (有点奇怪)
您可以使用下面的中间件记录会话数据,以查看是否存在护照对象,如果sesssion数据中没有护照对象,则用户已注销。
app.use((req, res, next) => {
console.log('session:\n', req.session);
next();
});
答案 1 :(得分:-1)
cookie: {maxAge: 5000}
将在 5 秒后过期客户端的 cookie,而不是存储在 REDIS 中的会话。
如果您想使 RedisStore 中的会话过期,请使用 Ali Sherafat 中提到的 ttl 选项。