Node.js 数据头中未显示快速cookieSession键
我试图解决访问socket.io中的会话变量这一臭名昭著的问题。我基本上已经阅读了谷歌上关于这个话题的每一个链接,我仍然在努力 在完成所有的路由之后,我有以下几点:Node.js 数据头中未显示快速cookieSession键,node.js,session,express,connect,socket.io,Node.js,Session,Express,Connect,Socket.io,我试图解决访问socket.io中的会话变量这一臭名昭著的问题。我基本上已经阅读了谷歌上关于这个话题的每一个链接,我仍然在努力 在完成所有的路由之后,我有以下几点: io.set('authorization', function(data,accept) { data.cookie = cookie.parse(data.headers.cookie); ---> console.log(data.cookie); data.sessionID = connect
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时,会话变量未定义
我真的在努力解决这个问题——我已经做了几个小时了。有什么帮助吗
编辑:
总结我已解决的问题:
很接近了。实际上,在将cookie传递给解析器之前,不需要修改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解析过程中可能出现的任何错误,并将
握手
对象作为HTTP请求对象传递,因为它们都具有头.cookie
属性。cookie解析器随后将解析cookie并将其分配给握手
对象,因此然后,您可以从握手中找到会话ID。signedCookies
您已经非常接近了。实际上,在将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解析过程中可能出现的任何错误,并将
握手
对象作为HTTP请求对象传递,因为它们都具有头.cookie
属性。cookie解析器随后将解析cookie并将其分配给握手
对象,因此然后,您可以从handshake.signedCookies
中找到会话ID。啊,是的,删除标题。cookie
部分。对于错误,很抱歉,我们还将编辑示例。handshake.signedCookies为空。您知道为什么会是这样吗?会话中间件的设置和完整授权代码。更新了我的原始帖子。谢谢谢谢你的帮助。啊,是的,删除标题。cookie
部分。很抱歉,我们也会编辑示例。handshake.signedCookies是空的。你知道为什么会这样吗?会话中间件的设置和完整的授权码。更新了我的原始帖子。非常感谢你的帮助。