我正在尝试解决在 socket.io 中访问会话变量的臭名昭著的问题。我基本上已经阅读了谷歌上有关该主题的每个链接,但我仍在苦苦挣扎。
毕竟我的路由我有这个:
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 时,我的会话变量未定义。
我真的很难解决这个问题——我已经做了几个小时了。有什么帮助吗?
编辑:总结我已解决的问题:
- 在 app.config 我使用的是 cookieSession 而不是 session
- 我的客户端正在连接到我的服务器的端口转发的外部 ip 版本。这没有携带 cookie 数据。
- .split('.')[0].substring(2) 在查找 sessionID 时是绝对必要的
- 在 io.set('authorization, function (handshake,callback) ... 结束时必须调用 "callback(null,true)" 以使 socket.io 连接正常进行