【发布时间】:2017-10-09 10:11:47
【问题描述】:
我正在使用 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 环境。
【问题讨论】:
-
如果你希望它是 30 分钟,你必须将它设置为 1000*60*30,而不是 10000*30 = 5 分钟。另外,我不确定,但我认为如果你想使用基于 cookie 的会话,你必须在设置会话之前初始化 cookie 解析器 var cookieParser = require('cookie-parser'); app.use(cookieParser())
-
@FluffyNights
cookie-parser不再需要,see the notes。 -
我编辑了我的问题,向您展示我正在使用的框架
-
只要会话在请求期间被修改,它就不会过期。
maxAge值基本上用于 idle 计时器:如果会话在maxAge毫秒内根本没有被修改,则会话将过期。因此,如果您正在重新加载等待到期的页面,则会话可能每次都会更新并且计时器会重置。 -
@robertklep 但是,如果我关闭选项卡并等待时间过去,会话仍然存在,我不知道我没有为此做些什么正常工作。 ://
标签: node.js session express redis