我正在使用express和redis来使 session 在我的系统上保持事件状态。我在设置 sessionCookie 上的 maxAge 时遇到一些问题。默认情况下,我读到的时间是 24 小时,但这对于保持其存活来说是很长的时间。我想设置大约 30 分钟,然后注销用户,我更改了 1 分钟以查看它是否有效,但没有任何反应,用户仍然登录。
这是我的 session 函数:
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 session 内容的文件是这两个: express.js和 default环境。
最佳答案
这是我的 session 配置,它有效。
出于测试目的,我将过期时间设置为 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以毫秒为单位! (有点奇怪)
您可以使用如下中间件记录 session 数据,以查看护照对象是否存在,如果 session 数据中不存在护照对象,则用户将被注销。
app.use((req, res, next) => {
console.log('session:\n', req.session);
next();
});
关于node.js - Express 和 Redis session 的过期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43897941/