如何从请求中获取sessionId?

Luk*_*uke 5 cookies session node.js express

我用express来支持我的会话管理:

app.use(express.cookieParser('your secret here'));
app.use(express.session({secret: 'mysecretcode'}));
Run Code Online (Sandbox Code Playgroud)

我从请求中提取并保存sessionId的内容.但是,我从req.sessionID获得的id与cookie中发送的id不同:

req.sessionID --> 'E7oSoKmQfcMKnk5_jA5tF5vR'
cookie.connect.sid --> 's%3AE7oSoKmQfcMKnk5_jA5tF5vR.DQnYdDDcFn8K2JJHMgWL5DTzNYYwIU3DA5a10WImA7U';
Run Code Online (Sandbox Code Playgroud)
  1. 为什么这两个是不同的?
  2. 如何在发送响应之前获取connect.sid?

Luk*_*uke 3

我阅读了connect.session的源代码,得到:

key = options.key || 'connect.sid'
Run Code Online (Sandbox Code Playgroud)

var val = 's:' + signature.sign(req.sessionID, secret);
val = cookie.serialize(key, val);
debug('set-cookie %s', val);
res.setHeader('Set-Cookie', val);
Run Code Online (Sandbox Code Playgroud)

因此,当响应的“header”事件触发时,connect 会将 cookie 设置到响应标头中,并且当您调用 response.end() 时,connect 会将会话数据保存到存储中。

就是这样。