gpt4 book ai didi

node.js - Express cookieSession 键未显示在数据 header 中

转载 作者:太空宇宙 更新时间:2023-11-04 01:09:18 25 4
gpt4 key购买 nike

我正在尝试解决访问 socket.io 中的 session 变量的臭名昭著的问题。我基本上已经阅读了 Google 上有关该主题的所有链接,但我仍然在苦苦挣扎。

在我完成所有路由之后,我有这个:

io.set('authorization', function(data,accept)
{
data.cookie = cookie.parse(data.headers.cookie);
---> console.log(data.cookie);
data.sessionID = connect.utils.parseSignedCookie(data.cookie['express.sid'].split('.')[0].substring(2), conf.sessionSecret);

sessionStore.get(data.sessionID, function (err, session)
{
console.log(session);
});
});

不幸的是,我画了一个箭头的console.log返回了这个:

{ 'connect.sid': 's:3pIi31DPthO8KVOjqzYpeL75.nHvKOpMZsUsyto7CtBJgcJZIiBSN+IC2/aD0GcfYftU' }

当然,我收到了有关express.sid未定义的错误。当我将express.sid更改为connect.sid时,我的 session 变量未定义。

我真的很难解决这个问题 - 我已经花了几个小时了。有什么帮助吗?

编辑:总结一下我已解决的问题:

  1. 在 app.config 中,我使用 cookieSession 而不是 session。
  2. 我的客户端正在连接到我的服务器的端口转发的外部 IP 版本。这没有携带 cookie 数据。
  3. .split('.')[0].substring(2) 在查找 sessionID 时是绝对必要的。
  4. 在 io.set('authorization, function (handshake,callback)) 的最后,必须调用 "callback(null,true)"才能使 socket.io 连接正常进行。

最佳答案

你已经很接近了。实际上,在将 cookie 传递给解析器之前,您不需要修改它。

io.set('authorization', function(handshake, callback) {
handshake.cookie = cookie.parse(handshake.headers.cookie);
handshake.sessionID = connect.utils.parseSignedCookie(handshake.cookie['express.sid'], conf.sessionSecret);

sessionStore.get(handshake.sessionID, function(err, session) {
// the session would be here
});
});

但是,由于您可以访问 cookie 解析器中间件,我个人会这样做:

var parseCookie = express.cookieParser(conf.sessionSecret);
io.set('authorization', function(handshake, callback) {
if (handshake.headers.cookie) {
parseCookie(handshake, null, function(err) {
handshake.sessionID = handshake.signedCookies['express.sid'];
sessionStore.get(handshake.sessionID, function(err, session) {
// the session would be here
});
});
}
});

此方法收集 cookie 解析过程中可能出现的任何错误,并通过传递 handshake 来工作。对象就好像它是 HTTP 请求对象一样,因为它们都有 headers.cookie属性(property)。然后cookie解析器将解析cookie并将它们分配给handshake对象,这样您就可以从 handshake.signedCookies 找到 session ID .

关于node.js - Express cookieSession 键未显示在数据 header 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19553615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com