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

时间:2011-11-06 20:35:58

标签: cookies node.js socket.io

我无法从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不可用?

4 个答案:

答案 0 :(得分:7)

对主人说道。您的客户连接到什么?我遇到了Expressjs 3. *和Socket.io的问题,但是我发布的客户端连接为:

io.connect(127.0.0.1);

而不是

io.connect('localhost');

现在将可爱的新解析程序合并在一起。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

查看有关socket.io和身份验证的this question。实际上,关于这个主题的确有a bunch个问题:)

答案 3 :(得分:0)

你看了看,没有任何“cookie”标题,比如

cookie: sid=whatsoever

我猜你的app.js配置文件有问题。如果您未使用app根文件夹中的$ 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')));
});