我无法从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不可用?
答案 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')));
});