Sails.js滚动会话

No_*_*ame 3 javascript session node.js express sails.js

如果没有用户活动(不包括websockets实时更新数据),则滚动会话是在设定的时间内到期的会话.如果用户在到期前访问该站点的另一部分,则应延长到期时间.我如何使用Sails.js做到这一点?设置maxAge和in expires下没有达到预期的效果.到期时不会因另一个页面加载而延长.它保持不变.cookie/config/session.js

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

EDIT2:我看到了这个答案:尽管有活动,ExpressJS会话即将到期我是否需要复制和粘贴

req.session._garbage = Date();
req.session.touch();
Run Code Online (Sandbox Code Playgroud)

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

sgr*_*454 7

在Sails中更改Express依赖项并不是我们需要的.但与此同时,您可以通过多种方式处理此问题,具体取决于您要触发cookie刷新的条件:

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

配置/策略:

'*': 'refreshSessionCookie'
Run Code Online (Sandbox Code Playgroud)

API /政策/ refreshSessionCookie:

module.exports = function(req, res, next) {
    req.session._garbage = Date();
    req.session.touch();
    return next();
}
Run Code Online (Sandbox Code Playgroud)
  • 如果您希望在具有会话的用户发出任何请求的任何时候进行刷新,无论是控制器,视图还是静态资产,您都可以将代码放在将为每个请求运行的自定义中间件中.

配置/ 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'
    ]
}
Run Code Online (Sandbox Code Playgroud)