Connect的会话中间件的签名Cookie如何工作?

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中的甚至是。目的是什么

我听说签名用于“签名”哈希。“签名”或“签名”到底是什么意思?我还需要对此过程进行解释。

谢谢!

Pas*_*cle 5

签名在那里,因此服务器可以验证它生成了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。