Sails.js滚动会话

滚动会话是在没有用户活动(不包括实时更新数据的websockets)的情况下在一定时间内到期的会话。 如果用户在到期之前访问该网站的另一部分,则应该延长到期日。 我将如何与Sails.js做到这一点? 在/config/session.js cookie下设置maxAgeexpires不会产生所需的效果。 到期不会延长与另一个页面加载。 它保持不变。

编辑:一旦Sails.js升级其Express版本,这会解决吗? 我看到https://github.com/expressjs/session有一个rolling选项。

编辑2:我看到这个答案: 尽pipe活动ExpressJS会话过期我需要复制和粘贴

 req.session._garbage = Date(); req.session.touch(); 

到控制器的每条路线上? 有没有更好的办法?

在Sails中改变Express依赖并不是我们所轻视的。 但在此期间,您可以通过几种方式处理这个问题,具体取决于您想要触发Cookie刷新的条件:

  • 如果您只需要在控制器操作运行时进行刷新,则可以将您的代码放入全局策略中 。 这不适用于直接映射到视图的路由,也不适用于静态资产。

configuration/策略:

 '*': 'refreshSessionCookie' 

API /政策/ refreshSessionCookie:

 module.exports = function(req, res, next) { req.session._garbage = Date(); req.session.touch(); return next(); } 
  • 如果您希望随时进行刷新,具有会话的用户可以请求任何内容 (无论是控制器,视图还是静态资源),则可以将代码放置在将针对每个请求运行的自定义中间件中。

configuration/ http.js:

 middleware: { refreshSessionCookie: function(req, res, next) { req.session._garbage = Date(); req.session.touch(); return next(); }, order: [ 'startRequestTimer', 'cookieParser', 'session', 'refreshSessionCookie', // <-- your custom middleware 'bodyParser', 'handleBodyParserError', 'compress', 'methodOverride', 'poweredBy', '$custom', 'router', 'www', 'favicon', '404', '500' ] }