2013-10-19 17 views
1

我使用node.js和socket.io。在客户端,我写了这样一个cookie:如何访问socket.io连接中的cookie数据?

var socket = io.connect('http://localhost:3000'); 
document.cookie="foo=bar"; 
socket.emit('this', { is: 'test'}); 

,并在服务器端,我需要能够从该cookie读取socket.io连接里面,像这样:

io.sockets.on('connection', function (socket) { 
    socket.on('this', function(reqData){ 
     console.log(socket.handshake.headers); // there is no cookies here! 
    }); 
} 

无框架解决方案是首选,任何帮助表示赞赏。 谢谢。

更新:this gist你可以找到我的完整代码。

+1

请参阅此问题:[如何存储Cookie中插座 - io-socket-handshake-headers-cookie](http://stackoverflow.com/questions/19446602/how-to-store- cookie-in-socket-io-socket-handshake-headers-cookie/19451088#19451088) –

+0

@MatthiasHoldorf感谢您的帮助,但我已经看到了。涉及一些第三方模块,并且某些部分的答案已过时。 –

回答

0

尝试建立从客户机连接之前设置cookie:

document.cookie = "foo=bar"; 
var socket = io.connect('http://localhost:3000'); 
socket.emit('this', { is: 'test'}); 

Here是我测试了一个小例子。如预期的那样,服务器console.log是每次重新加载页面的新cookie。

+0

不,它没有工作。 ( –

+0

@Nasser对我来说是这样的:你的HTML是由同一个应用程序服务的吗? – robertklep

+0

我这么认为!我在我的应用程序中有两个分开的函数,一个用于提供这样的文件: 'http.createServer(onRequest)。听(HTTPPORT); 函数onRequest(请求,响应){// 时钟为投放文件 }' 和用于服务socket.io另一功能: 'io.sockets.on( '连接',函数(插座) { //用于处理事件的东西 }' 这两个在我的index.js中被调用,你认为我需要改变这个架构么? –