我正在使用 mongoStore 来管理 express.js 框架上的 session 。
...
var MongoStore = require('connect-mongo')(express);
...
...
app.use(express.session({
secret:settings.cookieSecret,
store: new MongoStore({db:settings.db})
}));
...
但是这里是mongoDB上 session 集合中的记录
> 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。他们在哪里存储这个值?如果我的理解有误,请指正。谢谢!
最佳答案
如果您阅读 source code connect-mongo
,Mongo文档的对象id是session id:
var s = {_id: sid, session: this._serialize_session(session)};
// get the sessionID from the cookie
req.sessionID = unsignedCookie;
但是,您不仅会在屏幕截图中看到 cookie ID,因为 this relevant answer 将散列附加到 cookie 值(请参阅 cookie-signature
module ) ,因此您看到的是 sid.hash
cookie 值。
这是 relevant source code ,存储散列值的位置:
// set-cookie
val = 's:' + signature.sign(val, secret);
val = cookie.serialize(key, val);
您还可以阅读 unit tests以获得更透彻的理解。
关于node.js - express.session 在服务器端在哪里存储哈希 session key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20491369/