如何挂钩到快递会话创建事件

时间:2015-11-12 19:10:55

标签: javascript node.js mongodb express express-session

如何表达express创建新会话的时间?我正在使用mongodb会话商店。

我遇到了创建额外会话的问题,并希望通过跟踪哪些网址请求触发要创建的新会话来缩小问题范围。

3 个答案:

答案 0 :(得分:2)

您可以加入genid回调。默认情况下,express-session会生成自己的会话ID。

但您可以通过指定genid回调来自行生成会话ID。在此回调中,您可以记录正在创建新会话(然后返回唯一的会话ID)。

这是一个例子,改编自express-session自述文件:

app.use(session({
  genid: function(req) {
    console.log('New session was created');
    return genuuid(); // generate a UUID somehow and return it
  },
  secret: 'keyboard cat'
}));

答案 1 :(得分:2)

这就是我最终要做的事情。

app.use(function(req, res, next) {
    if (!req.session.returning) {
        // session was just created
        req.session.returning = true
    } else {
        // old session
    }
    next()
})

答案 2 :(得分:0)

内特的回答很好。我要回答,是因为我想补充2个。

  1. 如果您还想要express-session would otherwise generate的sessionID类型。您可以这样做:
const uid = require('uid-safe').sync;
//...

    genid: function(req) {
        console.log('New session was created');
        // do what you want to do here!
        return uid(24); // <-- the way express-session generates it
    },
  1. 请注意,您不能将async函数用于Genid。 Express-session在不使用await的情况下调用此函数,因此将获得一个Promise而不是uid。