如何挂钩到快速会话创建事件
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 个内容。
- 以防您还想要 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
},
- 请注意,您不能对 genid 使用
async
函数。 Express-session 在没有 await
的情况下调用此函数,因此会得到一个承诺而不是 uid。
如何判断 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 个内容。
- 以防您还想要 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
},
- 请注意,您不能对 genid 使用
async
函数。 Express-session 在没有await
的情况下调用此函数,因此会得到一个承诺而不是 uid。