【问题标题】:How to hook into express session creation event如何挂钩快速会话创建事件
【发布时间】:2016-02-14 05:52:29
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    Nate 的回答很好。我之所以回答是因为我想添加 2 个补充内容。

    1. 如果您还想要express-session would otherwise generate 的那种会话ID。你可以这样做:
    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。

    【讨论】:

      【解决方案2】:

      这就是我最终要做的。

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

      【讨论】:

      【解决方案3】:

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

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

      这里是一个例子,改编自express-session README:

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

      【讨论】:

      • 谢谢,这是一个很好的答案,但我提出了一个后续/更好的问题:有没有办法判断 req.session 对象是最近创建的,还是从商店中检索的?
      猜你喜欢
      • 2022-08-06
      • 2012-08-30
      • 1970-01-01
      • 2014-04-30
      • 2017-03-30
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      相关资源
      最近更新 更多