我正在使用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,但得到了相同的结果。会是什么呢?
EDITED:
I using SEAN.JS https://github.com/seanjs-stack/seanjs/会话内容的文件是这两个:快递.js https://github.com/seanjs-stack/seanjs/blob/master/config/lib/express.js and default https://github.com/seanjs-stack/seanjs/blob/master/config/env/default.js环境。
这是我的会话配置,它有效。
出于测试目的,我将过期时间设置为 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}
}));
I set maxAge
当我设置时它不起作用ttl
有效。
Note:我测试发现ttl
单位是秒,但 maxAge 单位是毫秒! (有点奇怪)
您可以使用如下中间件记录会话数据,以查看护照对象是否存在,如果会话数据中没有护照对象,则用户将被注销。
app.use((req, res, next) => {
console.log('session:\n', req.session);
next();
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)