express.session store在服务器端散列会话密钥在哪里?

我正在使用mongoStore来pipe理express.js框架中的会话。

... var MongoStore = require('connect-mongo')(express); ... ... app.use(express.session({ secret:settings.cookieSecret, store: new MongoStore({db:settings.db}) })); ... 

这是connect.sid及其值

但是这里是mongoDB会话集合中的logging

 > db.session s.find() { "_id" : "gLQe0NwaSmk9nPu6vOWKuSy0", "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"flash\":{},\"user\":null}", "expires" : ISODate("2013-12-24T05:02:33.308Z") } { "_id" : "SoqYLZnEzlVCdj4A1606fDPg", "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"flash\":{},\"user\":\"vvv\"}", "expires" : ISODate("2013-12-24T09:43:55.098Z") } { "_id" : "pBtoFt6sR2EvNCuPJVqAFVpR", "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"flash\":{}}", "expires" : ISODate("2013-12-24T09:24:27.846Z") } { "_id" : "MEkFGzd190YeJAGDH3nzLT14", "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"flash\":{}}", "expires" : ISODate("2013-12-24T09:44:10.585Z") } > 

我的理解是他们应该在客户端cookie和服务器数据库或内存中的某处存储connect.id的值。 由于我使用connect-mongo,connect.id应该存储在db.sessions中。

但是我在服务器端找不到connect.id。 他们在哪里存储这个值? 如果我的理解错误,请纠正。 谢谢!

如果您阅读connect-mongo的源代码 ,Mongo文档的对象ID是会话ID:

 var s = {_id: sid, session: this._serialize_session(session)}; 

在会话中间件 :

 // get the sessionID from the cookie req.sessionID = unsignedCookie; 

但是,您不会在屏幕截图中看到Cookie ID,因为cookie-signature模块 sid.hash cookie附加到cookie值(请参阅相关答案 ),因此您将看到sid.hash cookie值。

以下是存储哈希值的相关源代码 :

  // set-cookie val = 's:' + signature.sign(val, secret); val = cookie.serialize(key, val); 

你也可以阅读unit testing,以获得更透彻的理解。

express.js的会话cookiefunction实际上是由连接提供的

您设置的密钥用于将数据库中的会话ID签名为您所看到的值

检查源代码