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

时间:2013-02-12 23:42:29

标签: node.js session cookies connect middleware

我想解释connect.sid cookie如何在Connect Node.js框架中工作。我注意到它们形成了像

一样
s:hash.signature

当哈希能够用于从内存存储或redis存储中访问会话数据时,我不明白如何使用签名。

另外,我不明白为什么s:甚至在cookie中;这是什么目的。

我听说签名用于“签名”哈希。 “签署”或“签名”究竟是什么意思?我也需要对这个过程进行解释。

谢谢!

1 个答案:

答案 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。