9

如何在 Socket.IO 上添加 cookie 值?

io.sockets.on('connection', function (client)
{ 
    console.log(client.id); 
    client.handshake.headers.cookie.socketID = client.id;   // not work
 // client.handshake.headers.cookie("socketID",client.id);  //crash

    console.log(client.handshake.headers.cookie);
// The current output is:
//connect.sid=tI21xumy3u2n4QXO1GljmPAf.pzFQ1Xu%2B6bz36secu4VSCdSNU8PT1L44gQZ4kFUFQqQ
//this is express session id, and I also want to add client.id of Socket.IO. 

//...........
}

我已经阅读了 http://www.danielbaulig.de/socket-ioexpress/ ,但我不需要 node.js 上的会话管理,而只需要像 connect.sid 一样在 cookie 中添加一个 socket.io 客户端 ID 值。

4

2 回答 2

12

看看使用 Socket.io进行授权。这是它处理初始连接请求的地方,您可以在其中设置响应标头。

我不确定cookie(name,value)速记是否有效,但您可以尝试手动设置:

    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000)); // set day value to expiry
    var expires = "; expires="+date.toGMTString();

    handshake.headers.cookie = name+"="+value+expires+"; path=/";
于 2012-05-27T14:53:35.993 回答
-4

可能看起来很老套,我尝试了各种方法来设置 cookie 以响应握手获取请求,但没有成功。但是,我设法通过自行调整 socket.io 原型代码使其工作。

在 socket.io 版本 1.3.4 中,

在 \node_modules\socket.io\node_modules\engine.io\lib\server.js

将第 249 行从:

headers['Set-Cookie'] = self.cookie + '=' + id;

headers['Set-Cookie'] = req.headers.cookie;

请求中的所有 cookie 都会在响应中返回

于 2015-06-21T19:23:27.990 回答