更新/刷新快速会话

在我的应用程序中,如果用户未login,则会限制某些操作和页面的访问权限。我有:

var restrict = function(req, res, next) { if (!req.user) { console.log("USER isn't logged in.") return res.status(403).send('Access or action denied, please log in'); } next(); } app.get('/stocks', restrict, MainHandler.findAllStocksFromUser); app.get('/stocks/:id', MainHandler.findStockByIdAndDates); app.put('/stocks/:id/stockActions', restrict, MainHandler.handleStockAction); 

我本质上是试图每次客户端向服务器发出请求时刷新一个会话,以便服务器不会注销用户/不应该销毁会话。 对于testing,我希望会话过期/用户被注销,如果20秒后没有用户向服务器发出请求。 我有:

  app.use(session({secret: 'secret', saveUninitialized: true, resave: true, expires: new Date(Date.now() + (20000))})); 

然后,我尝试使用中间件来每次使用请求时刷新到期date:

 // Session-persisted message middleware app.use(function(req, res, next){ req.session.cookie.expires = new Date(Date.now() + 20000); next(); }); 

但是,如果我从客户端login,然后点击左右,导致对服务器的请求,尽pipe尝试“刷新”中间件中的会话,但我仍然在客户端上20秒后出现login错误。 我也尝试使用与中间件相同的策略使用maxAge。 有任何想法吗? 谢谢!

       

网上收集的解决方案 "更新/刷新快速会话"

express-session支持基于持续时间的maxAge设置,这比为所有会话设置固定date更好。 所以你的中间件使用应该看起来像:

 app.use(session({ secret: 'secret', saveUninitialized: true, resave: true, maxAge: 20000 })); 

接下来,要更新会话的到期date,您可以调用req.session.touch(); 如果这是你正在做的会议及其内容。

该文档还有许多关于控制会话到期和相关主题的其他信息。

你可以尝试定义你的会话如下

 app.use ( session ({ secret: "secret", saveUninitialized: true, resave: true, cookie: { expires: 20 * 1000 } }) ); 

然后使用刷新会话

 req.session.touch() 

或者你可以定义你的会话为

 app.use ( session ({ secret: "secret", saveUninitialized: false, resave: true, rolling: true, cookie: { expires: 20 * 1000 } }) ); 

它将自动更新会话,并且只有在expiresvariables中的值已空闲时才会过期