Sam*_*Sam 4 cookies session middleware connect node.js
我想解释一下Connect.sid cookie在Connect Node.js框架中如何工作。我注意到它们的格式像
s:hash.signature
Run Code Online (Sandbox Code Playgroud)
我不明白当哈希值超过了用于从内存存储或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
}
});
Run Code Online (Sandbox Code Playgroud)
您需要使用socket.io的“授权”功能,以便可以访问标头。该代码在使用xhr-polling传输时有效,例如,我不确定这是否适用于websocket。