node.js + express.js + socket.io 授权:没有cookie

Posted

技术标签:

【中文标题】node.js + express.js + socket.io 授权:没有cookie【英文标题】:node.js + express.js + socket.io authorization: no cookie 【发布时间】:2011-12-23 05:33:43 【问题描述】:

我无法从我的 socket.io 授权中获取“cookie”数据。

io.configure(function() 
io.set('authorization', function (data, cb) 
   console.log(data);
   // data.headers.cookie <-- should be the cookie
);
);

所以它打印的是:

 headers: 
  host: 'frisr.dk:1000',
 connection: 'keep-alive',
 origin: 'http://frisr.dk',
 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.2 (Khtml, like Gecko) Chrome/15.0.874.106 Safari/535.2',
 accept: '*/*',
 referer: 'http://frisr.dk/',
 'accept-encoding': 'gzip,deflate,sdch',
 'accept-language': 'da-DK,da;q=0.8,en-US;q=0.6,en;q=0.4',
 'accept-charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3' ,
address:  address: '80.71.135.24', port: 53549 ,
time: 'Sun Nov 06 2011 22:34:12 GMT+0000 (UTC)',
query:  t: '1320610986125' ,
url: '/socket.io/1/?t=1320610986125',
xdomain: true,
secure: undefined,
issued: 1320618852796 

您可以在此处查看代码: http://frisr.dk

为什么 cookie 不可用?

【问题讨论】:

因为data.headers中没有cookie属性... 我如何得到它:D 您解决了这个问题吗?我也有类似的问题。 似乎是 socket.io 中的一个错误。希望他们会在未来的版本中修复它。 【参考方案1】:

查看this question 关于socket.io 和身份验证的信息。其实这个话题真的有a bunch的问题:)

【讨论】:

但是我所做的应该工作。它可以在我拥有的另一台服务器上运行,但我不知道为什么它不能在这台服务器上运行。【参考方案2】:

你看了吗,没有任何“cookie”标题,类似

cookie: sid=whatsoever

我猜你的 app.js 配置文件有问题。如果您没有在应用根文件夹中使用命令 $ express --sessions myApp 创建应用,则标题中不会有任何 cookie。

为确保您有 cookie,请尝试查看您的 app.js 配置:

app.configure(function()
  app.set('port', process.env.PORT || 8080);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  //this snippet here
  app.use(express.cookieParser('your secret here'));
  app.use(express.session());
  //end of snippet
  app.use(app.router);
  app.use(require('less-middleware')( src: __dirname + '/public' ));
  app.use(express.static(path.join(__dirname, 'public')));
);

【讨论】:

【参考方案3】:

在握手请求期间没有设置 Cookie。 可能已经为不同的服务器/域设置了 cookie,这就是为什么在您的第二台服务器上它存在于您的数据对象中。检查是否在 firebug ot smth 中为此域设置了 cookie。

【讨论】:

【参考方案4】:

看看你的主人。您的客户端连接到什么?我也遇到了 expressjs 3.* 和 Socket.io 的问题,但我发出我的客户端连接为:

io.connect(127.0.0.1);

代替

io.connect('localhost');

现在将可爱的新解析例程组合在一起。

https://groups.google.com/forum/?fromgroups=#!topic/express-js/II3eIM9HHQY

【讨论】:

以上是关于node.js + express.js + socket.io 授权:没有cookie的主要内容,如果未能解决你的问题,请参考以下文章

node.js 和 express 的区别

UnhandledPromiseRejectionWarning、Express.js 和 Node.js

jQuery 函数不适用于 node.js 中的 express.js 路由

如何启用调试 express.js/node.js 应用程序

是否可以使用 express.js 清除 node.js 需要缓存?

如何使用 Express JS/Railway JS (Node.JS) 生成 JSON