How to add a cookie value on Socket.IO?
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.
//...........
}
I have read http://www.danielbaulig.de/socket-ioexpress/ , but I do not need session management on node.js, but just need to add a socket.io client ID value in cookie as connect.sid does.
Take a look at Authorization with Socket.io. This is where it handles the initial connection request, and where you can set a response header.
I'm not sure if the cookie(name,value)
shorthand works, though you can try setting it manually:
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=/";
May seem hacky, I tried all sorts of ways to set a cookie on response to the handshake get request with no success. However, I managed to make it work by tweaking the socket.io prototype code it-self.
In socket.io version 1.3.4,
in \node_modules\socket.io\node_modules\engine.io\lib\server.js
change line 249 from :
headers['Set-Cookie'] = self.cookie + '=' + id;
to
headers['Set-Cookie'] = req.headers.cookie;
all cookies in the request will be returned in the response