【问题标题】:Only save user session on certain requests仅在某些请求上保存用户会话
【发布时间】:2016-06-28 11:33:06
【问题描述】:

我使用connect-mongoexpress-session 来跟踪用户的会话。我有以下代码来设置会话:

app.use(session({
    secret: 'scamp',
    store: new MongoStore({
        mongooseConnection: mongoose.connection,
        ttl: 60 * 30 // half hour
    })
}));

这样做的问题是为每个发送到服务器的请求创建一个会话。例如,我使用 Amazon Web Services 来托管我的应用程序,并且每 10 秒向我的服务器发送一个请求以确保它仍然正常运行(称为运行状况检查)。健康检查请求是对 mydomain/health 的 GET 请求。但是使用我拥有的代码,这将创建一个新会话,该会话存储在我的远程 Mongo Db 的会话集合中。所以数据库增长得很快。

一些背景:我的应用程序允许用户上传文件,然后与每个文件进行交互。我只希望会话跟踪用户正在与之交互的 CURRENT 文件(在我的会话中,我保留当前文件 ID、文件路径、选择的当前文件参数等)。所以基本上,我只想为我的 API 的某些请求设置会话,而不是全部。

所以我想我会重写我的代码:

var setsession = function (req, res, next){

    session({
        secret: 'scamp',
        store: new MongoStore({
            mongooseConnection: mongoose.connection,
            ttl: 60 * 30 // half hour
        })
    })

    next();
};

app.use(setsession);

然后我计划在setSession() 中进行检查以查看请求端点是什么,如果请求是我想要会话的对象之一,则设置会话。但是,在更改了我上面的代码之后,这会立即破坏我的应用程序。下面我有:

app.get('/api/canvas', function(req, res) {

    sess = req.session;

    var callback = function() {

        graphController.constructGraph();
    };

    console.log('req.session is ', req.session);

    var graphController = new GraphController(req, res, sess, callback);
});

现在,在将session() 移出app.use 并进入它自己的方法之后,req.session 是undefined,我的应用程序中断了。知道为什么会这样吗?

另外,这是否是停止在对 API 的每个请求时存储会话的好方法?

【问题讨论】:

    标签: javascript node.js mongodb express-session


    【解决方案1】:

    有一个saveUninitialized 选项可防止会话在不包含任何数据时被保存。

    app.use(session({
        secret: 'scamp',
        store: new MongoStore({
            mongooseConnection: mongoose.connection,
            ttl: 60 * 30 // half hour
        }),
        saveUninitialized: false
    }));
    

    强制将“未初始化”的会话保存到存储中。当一个会话是新的但未被修改时,它是未初始化的。选择 false 对于实现登录会话、减少服务器存储使用量或遵守在设置 cookie 之前需要许可的法律很有用。选择 false 还有助于解决竞争条件,即客户端在没有会话的情况下发出多个并行请求。

    默认值为 true,但不推荐使用默认值,因为将来会更改默认值。请研究此设置并选择适合您的用例的设置。

    https://www.npmjs.com/package/express-session#saveuninitialized

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多