我想解释一下 connect.sid cookie 如何在 Connect Node.js 框架中工作。我注意到它们的格式如下,
s:hash.signature
我不明白当哈希能够用于从内存存储或 redis 存储访问会话数据时如何使用签名。
另外,我不明白为什么s:
甚至在cookie中;它的目的是什么。
我听说签名用于“签名”哈希。“签名”或“签名”到底是什么意思?我也需要对这个过程进行解释。
谢谢!
我想解释一下 connect.sid cookie 如何在 Connect Node.js 框架中工作。我注意到它们的格式如下,
s:hash.signature
我不明白当哈希能够用于从内存存储或 redis 存储访问会话数据时如何使用签名。
另外,我不明白为什么s:
甚至在cookie中;它的目的是什么。
我听说签名用于“签名”哈希。“签名”或“签名”到底是什么意思?我也需要对这个过程进行解释。
谢谢!
签名在那里,因此服务器可以验证它是否生成了 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。