Node.js 如何连接&x27;s会话中间件&x27;签名曲奇饼有什么用?
我想解释一下connect.sid cookies如何在connect Node.js框架中工作。我注意到它们是这样形成的Node.js 如何连接&x27;s会话中间件&x27;签名曲奇饼有什么用?,node.js,session,cookies,connect,middleware,Node.js,Session,Cookies,Connect,Middleware,我想解释一下connect.sid cookies如何在connect Node.js框架中工作。我注意到它们是这样形成的 s:hash.signature 我不明白当散列能够从内存存储或redis存储访问会话数据时,如何使用签名 另外,我不明白为什么s:甚至在cookie中;它的目的是什么 我听说签名是用来“签名”散列的。“签名”或“签名”的确切含义是什么?我也需要一个关于这个过程的解释 谢谢 签名在那里,因此服务器可以验证它是否生成了cookie,而不是某个随机攻击者 只有知道用于签名的秘
s:hash.signature
我不明白当散列能够从内存存储或redis存储访问会话数据时,如何使用签名
另外,我不明白为什么s:
甚至在cookie中;它的目的是什么
我听说签名是用来“签名”散列的。“签名”或“签名”的确切含义是什么?我也需要一个关于这个过程的解释
谢谢 签名在那里,因此服务器可以验证它是否生成了cookie,而不是某个随机攻击者 只有知道用于签名的秘密的人才能使用相同的值进行签名 “s:”这样就很容易知道它是一个签名cookie,而不是其他格式(如unsigned) 这里有一种从签名cookie中检索数据的方法,如果签名不正确,则失败。只有部分代码是从实际应用程序中提取出来的,但你应该明白这一点
var cookie = require('cookie');
var connect = require('connect');
var secret = "same secret used to sign cookies";
socketio.set('authorization', function(data, cb) {
if (data.headers.cookie) {
var sessionCookie = cookie.parse(data.headers.cookie);
var sessionID = connect.utils.parseSignedCookie(sessionCookie['connect.sid'], secret);
// do something here with decoded value
}
});
您需要使用socket.io中的“authorization”函数,以便访问标题。该代码在使用xhr轮询传输时有效,例如,我不确定这是否适用于websocket。每个sid都必须获得自己的签名,否则它就不能起作用。但是中间件如何知道签名是有效的,它是否将其存储在会话中?另外,为什么不制作一个很长的sid而不是签名呢?上面的代码中的秘密就是传递给express.session()来签名cookie的代码。签名是内容和秘密的散列。因此,当内容更改时,cookie也会更改?是的,确实如此。但最好只包含对存储在服务器上的实际数据的引用。与会话id example.btw一样,s:是特定于来自connect的cookieSession的,但这是一个很好的约定。