Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何连接&x27;s会话中间件&x27;签名曲奇饼有什么用?_Node.js_Session_Cookies_Connect_Middleware - Fatal编程技术网

Node.js 如何连接&x27;s会话中间件&x27;签名曲奇饼有什么用?

Node.js 如何连接&x27;s会话中间件&x27;签名曲奇饼有什么用?,node.js,session,cookies,connect,middleware,Node.js,Session,Cookies,Connect,Middleware,我想解释一下connect.sid cookies如何在connect Node.js框架中工作。我注意到它们是这样形成的 s:hash.signature 我不明白当散列能够从内存存储或redis存储访问会话数据时,如何使用签名 另外,我不明白为什么s:甚至在cookie中;它的目的是什么 我听说签名是用来“签名”散列的。“签名”或“签名”的确切含义是什么?我也需要一个关于这个过程的解释 谢谢 签名在那里,因此服务器可以验证它是否生成了cookie,而不是某个随机攻击者 只有知道用于签名的秘

我想解释一下connect.sid cookies如何在connect Node.js框架中工作。我注意到它们是这样形成的

s:hash.signature
我不明白当散列能够从内存存储或redis存储访问会话数据时,如何使用签名

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

我听说签名是用来“签名”散列的。“签名”或“签名”的确切含义是什么?我也需要一个关于这个过程的解释


谢谢

签名在那里,因此服务器可以验证它是否生成了cookie,而不是某个随机攻击者

只有知道用于签名的秘密的人才能使用相同的值进行签名

“s:”这样就很容易知道它是一个签名cookie,而不是其他格式(如unsigned)

这里有一种从签名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中的“authorization”函数,以便访问标题。该代码在使用xhr轮询传输时有效,例如,我不确定这是否适用于websocket。

每个sid都必须获得自己的签名,否则它就不能起作用。但是中间件如何知道签名是有效的,它是否将其存储在会话中?另外,为什么不制作一个很长的sid而不是签名呢?上面的代码中的秘密就是传递给express.session()来签名cookie的代码。签名是内容和秘密的散列。因此,当内容更改时,cookie也会更改?是的,确实如此。但最好只包含对存储在服务器上的实际数据的引用。与会话id example.btw一样,s:是特定于来自connect的cookieSession的,但这是一个很好的约定。