Node.js 如何从请求中获取sessionId?

Node.js 如何从请求中获取sessionId?,node.js,session,cookies,express,Node.js,Session,Cookies,Express,我使用express支持我的会话管理: app.use(express.cookieParser('your secret here')); app.use(express.session({secret: 'mysecretcode'})); 我知道如何从请求中提取和保存sessionId。但是,我从req.sessionID获得的id与cookie中发送的id不同: req.sessionID --> 'E7oSoKmQfcMKnk5_jA5tF5vR' cookie.connect

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

app.use(express.cookieParser('your secret here'));
app.use(express.session({secret: 'mysecretcode'}));
我知道如何从请求中提取和保存sessionId。但是,我从req.sessionID获得的id与cookie中发送的id不同:

req.sessionID --> 'E7oSoKmQfcMKnk5_jA5tF5vR'
cookie.connect.sid --> 's%3AE7oSoKmQfcMKnk5_jA5tF5vR.DQnYdDDcFn8K2JJHMgWL5DTzNYYwIU3DA5a10WImA7U';
  • 为什么这两者不同
  • 在发送响应之前,如何获取connect.sid

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

    key = options.key || 'connect.sid'
    

    所以,当响应的“header”事件被激发时,connect会将cookie设置到响应头中,当您调用response.end()时,connect会将会话数据保存到存储中


    就是这样。

    使用req.sessionID,它是由Express在代码中的中间件调用中设置的(我假设它位于路由设置之上,如果有的话)。请注意,如果您计划在sessionID之外创建和存储会话数据,则不建议将Express为会话提供的内置MemoryStore用于“生产”用途(无GC等)。
    var val = 's:' + signature.sign(req.sessionID, secret);
    val = cookie.serialize(key, val);
    debug('set-cookie %s', val);
    res.setHeader('Set-Cookie', val);