Node.js nodejs中的sessionsecret和签名cookie的作用相同吗?

Node.js nodejs中的sessionsecret和签名cookie的作用相同吗?,node.js,express,cookies,Node.js,Express,Cookies,在express中,您的设置会话有点像这样: app.use(express.session({ store: store({...}), secret: 'topsecret' })); 在阅读secret的功能时, 我发现:通过检查指纹来防止会话劫持 这听起来很像签名cookie:确保值未被篡改。它被放置在不同的对象(req.signedCookies)中以区分这两个对象 两者之间有区别吗 我了解签名cookie,哈希是用cookie值+secret创建的,并与cookie中的值一

在express中,您的设置会话有点像这样:

app.use(express.session({
  store: store({...}),
  secret: 'topsecret'
}));
在阅读
secret
的功能时, 我发现:
通过检查指纹来防止会话劫持

这听起来很像签名cookie:
确保值未被篡改。它被放置在不同的对象(req.signedCookies)中以区分这两个对象

两者之间有区别吗


我了解签名cookie,哈希是用cookie值+secret创建的,并与cookie中的值一起保存。这样,您就可以知道cookie值是否被篡改。

如果您是正确的,则该秘密用于对cookie进行签名,以便它不会被篡改。您可以查看有关express会话如何序列化cookie的:

function setcookie(res, name, val, secret, options) {
  var signed = 's:' + signature.sign(val, secret);
  var data = cookie.serialize(name, signed, options);

  debug('set-cookie %s', data);

  var prev = res.getHeader('set-cookie') || [];
  var header = Array.isArray(prev) ? prev.concat(data) : [prev, data];

  res.setHeader('set-cookie', header)
}
基本上是使用
SHA-256
对其进行签名,这将生成一个32字节的散列

还有一个
unsigncookie
,用于验证您的cookie是否未被篡改。显然,它会根据上面用于签名的相同秘密进行验证:

function unsigncookie(val, secrets) {
  for (var i = 0; i < secrets.length; i++) {
    var result = signature.unsign(val, secrets[i]);

    if (result !== false) {
      return result;
    }
  }

  return false;
}
函数(val,secrets){
对于(变量i=0;i
我也发现了这一点:
会话数据并没有保存在cookie中,但是使用了cookie,所以我们必须使用cookieParser()……秘密会话cookie用这个秘密签名以防止篡改
啊,是的-在这种情况下,我总是发现在源代码中钻取数据更容易……对于我来说,查看大量代码让我感到=@,让某人明确地用语言表达是一种安慰。