我想解释connect.sid cookie如何在Connect Node.js框架中工作。我注意到它们形成了像
一样s:hash.signature
当哈希能够用于从内存存储或redis存储中访问会话数据时,我不明白如何使用签名。
另外,我不明白为什么s:
甚至在cookie中;这是什么目的。
我听说签名用于“签名”哈希。 “签署”或“签名”究竟是什么意思?我也需要对这个过程进行解释。
谢谢!
答案 0 :(得分:4)
签名就在那里,所以服务器可以验证它是否生成了cookie,而不是一些随机攻击者。
只有知道用于签名的秘密的人才能使用相同的值对其进行签名。
“s:”有,所以很容易知道它是一个签名的cookie,而不是其他一些格式(如无符号)。
这是一种从签名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中的“授权”功能,以便您可以访问标头。使用xhr-polling传输时该代码有效,我不确定这是否适用于websocket。