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

How to hook into express session creation event

如何判断 express 何时创建新会话?我正在使用 mongodb 会话存储。

我在创建额外会话时遇到问题,我想通过跟踪哪些 url 请求触发了要创建的新会话来缩小问题范围。

您可以挂接到 genid 回调。默认情况下 express-session 生成自己的会话 ID。

但您可以通过指定 genid 回调自行生成会话 ID。在此回调中,您可以记录正在创建一个新会话(然后 return 一个唯一的会话 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'
}));

这就是我最后做的。

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

Nate 的回答很好。我回答是因为我想添加 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. 请注意,您不能对 genid 使用 async 函数。 Express-session 在没有 await 的情况下调用此函数,因此会得到一个承诺而不是 uid。