Sails.js滚动会话

时间:2014-08-08 09:10:35

标签: javascript node.js session express sails.js

滚动会话是在没有用户活动(不包括websockets实时更新数据)的情况下在设定的时间内到期的会话。如果用户在到期前访问网站的其他部分,则应延长到期日期。我如何使用Sails.js做到这一点?在maxAge的{​​{1}}下设置expirescookie不会产生预期的效果。到期时不会因另一个页面加载而延长。它保持不变。

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

EDIT2:我看到了这个答案:ExpressJS session expiring despite activity我是否需要复制和粘贴

rolling

到控制器中的每条路线上?还有更好的方法吗?

1 个答案:

答案 0 :(得分:7)

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

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

<强>配置/策略:

'*': 'refreshSessionCookie'

<强> API /策略/ refreshSessionCookie:

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

<强>配置/ 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'
    ]
}