如何在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中添加一个socket.io客户端ID值。
答案 0 :(得分:10)
使用Socket.io查看Authorization。这是它处理初始连接请求的地方,您可以在其中设置响应头。
虽然您可以尝试手动设置,但我不确定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=/";
答案 1 :(得分:-3)
可能看起来很hacky,我尝试了各种方法来设置响应握手获取请求的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都将在响应中返回