node.js - express.session 在服务器端在哪里存储哈希 session key ?

标签 node.js mongodb cookies express

我正在使用 mongoStore 来管理 express.js 框架上的 session 。

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

this is the connect.sid and its value

但是这里是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)};

session middleware :

// 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/

相关文章:

javascript - 如何防止 AddThis 在我的网站上使用 Cookie?

session - session 真的违反了 RESTful 原则吗?

javascript - 如何通过 jQuery 和自定义 url 参数使用 cookie

Node.js - 在 ES6 promise 链中抛出异常

node.js - 升级npm版本时出现问题

python - 通过 child_process 从 Python 向 Node 发送 JSON 如果太长会被截断,如何修复?

mongodb - 查找数组 A 至少包含数组 B 中的 X 个值的条目

Node.js 将自定义对象序列化/反序列化到 mongodb

javascript - 从函数内调用 http.get 时不返回响应

java - 如何获取jongo的jar lib文件?