如何挂钩到express会话创建事件

How to hook into express session creation event

本文关键字:创建 事件 会话 express 何挂钩      更新时间:2023-09-26

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

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

这就是我最终所做的。

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

您可以挂接到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. 如果您还想要express会话生成的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会话在没有await的情况下调用此函数,因此将获得promise而不是uid