我正在使用mongoStore来管理express.js框架上的会话。
...
var MongoStore = require('connect-mongo')(express);
...
...
app.use(express.session({
secret:settings.cookieSecret,
store: new MongoStore({db:settings.db})
}));
...
但是这里是mongoDB上的会话集合中的记录
> 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") }
>
我的理解是他们应该将connect.id的值存储在客户端cookie上以及服务器数据库或内存中的某个位置。由于我使用的是connect-mongo,因此connect.id应存储在db.sessions中。
但我在服务器端找不到connect.id。他们在哪里储存这个价值?如果我的理解是错误的,请更正。谢谢!
答案 0 :(得分:1)
如果您阅读connect-mongo
的{{3}},则Mongo文档的对象ID是会话ID:
var s = {_id: sid, session: this._serialize_session(session)};
source code中的:
// get the sessionID from the cookie
req.sessionID = unsignedCookie;
但是,您不仅可以在屏幕截图中看到Cookie ID,因为session middleware会将哈希值附加到Cookie值(请参阅this relevant answer),因此sid.hash
Cookie你看到的价值。
这是cookie-signature
module,其中存储了散列值:
// set-cookie
val = 's:' + signature.sign(val, secret);
val = cookie.serialize(key, val);
您还可以阅读relevant source code以获得更透彻的理解。
答案 1 :(得分:1)