我目前正在将 Express 单点登录应用程序迁移到新的身份提供者。这个新的 IdP 需要以下会话标准。
- 会话超时:1 小时
- 会话寿命:3 小时
如果我对此的解释正确,则会话应在连续 1 小时的空闲时间或会话最初生成 3 小时后终止,以先发生者为准。正在使用的相关 npm 包是 express-session 1.15.6 和 connect-mongo 2.0.1。在这一点上,我已经能够实现这两个会话参数,但不能同时实现。我也可以...
- 通过将会话 cookie maxAge 设置为 1 小时并将会话滚动设置为 true 来实现 1 小时会话超时,从而在每个响应中重置 cookie expires 字段。如connect-mongo中所述,如果 cookie 过期,它将应用于会话 ttl 字段。因此,只要不发生超时,更新 cookie 就会有效地无限期地更新会话。
- 通过将会话 cookie maxAge 设置为 3 小时并将会话滚动设置为 false 来实现 3 小时会话生命周期。现在会话 ttl 不会在每次响应时都重置,并且在会话创建 3 小时后它将被终止。
如上所述,我不能同时让这两个工作。任何见解都会有所帮助,因为我的网络开发经验很少。我研究过更改索引 TTL,这给了我一些初步希望。我相信我可以向会话对象添加另一个不依赖于会话 cookie 过期值的日期字段,即 createdAt 日期。然后,我可以使用 cookie expires 作为超时组件,并将 createdAt 日期作为生命周期组件。不幸的是,我没有运气将此值添加到会话对象中。我是否忽略了一个明显的快速会话选项或 connect-mongo 设置来解决我的问题?
app.use(session({
secret: keys.expressSession.pw,
saveUninitialized: false, // don't create a session for anonymous users
resave: false, // save the session to store even if it hasn't changed
rolling: true, // reset expiration on every response
name: "definitely not a connect cookie",
cookie: {
httpOnly: true,
maxAge: 60*1000, // one minute timeout
//maxAge: 180*1000 // three minute lifetime
secure: false // https only, when true add proxy trust
},
store: new MongoStore({
url:keys.mongodb.dbURI,
// ttl: value of cookie maxAge, set redundantly in case cookie has no expiry
})
}));