如何在Client中获取socket.io客户端的会话ID

我想在我的socket.io客户端获取客户端的会话ID。

这里是我的socket.io客户端:

var socket = new io.Socket(config.host, {port: config.port, rememberTransport: false}); // when connected, clear out display socket.on('connect',function() { console.log('dummy user connected'); }); socket.on('disconnect',function() { console.log('disconnected'); }); socket.connect(); return socket; 

我想获得这个客户端的会话ID,我怎么能得到这个?

看看这个话题我的入门 。

更新:

 var sio = require('socket.io'), app = require('express').createServer(); app.listen(8080); sio = sio.listen(app); sio.on('connection', function (client) { console.log('client connected'); // send the clients id to the client itself. client.send(client.id); client.on('disconnect', function () { console.log('client disconnected'); }); }); 

在socket.io> = 1.0上,connect事件触发后:

 var socket = io('localhost'); var id = socket.io.engine.id 

我只是有相同的问题/问题,并像这样解决(只有客户端代码):

 var io = io.connect('localhost'); io.on('connect', function () { console.log(this.socket.sessionid); }); 

*请注意:从v0.9开始, setget API已被废弃*

以下代码只能用于版本socket.io <0.9
请参阅 : http : //socket.io/docs/migrating-from-0-9/

这可以通过握手/授权机制来完成。

 var cookie = require('cookie'); io.set('authorization', function (data, accept) { // check if there's a cookie header if (data.headers.cookie) { // if there is, parse the cookie data.cookie = cookie.parse(data.headers.cookie); // note that you will need to use the same key to grad the // session id, as you specified in the Express setup. data.sessionID = data.cookie['express.sid']; } else { // if there isn't, turn down the connection with a message // and leave the function. return accept('No cookie transmitted.', false); } // accept the incoming connection accept(null, true); }); 

所有分配给数据对象的属性现在都可以通过socket.io连接对象的handshake属性来访问。

 io.sockets.on('connection', function (socket) { console.log('sessionID ' + socket.handshake.sessionID); }); 

因为某些原因

 socket.on('connect', function() { console.log(socket.io.engine.id); }); 

没有为我工作。 然而

 socket.on('connect', function() { console.log(io().id); }); 

为我工作。 希望这对于也有问题的人有帮助。 顺便说一句,我使用Socket IO> = 1.0。

尝试从你的代码socket.socket.sessionid即。

  var socket = io.connect('http://localhost'); alert(socket.socket.sessionid); var sendBtn= document.getElementById('btnSend'); sendBtn.onclick= function(){ var userId=document.getElementById('txt1').value; var userMsg = document.getElementById('txt2').value; socket.emit('sendto',{username: userId, message: userMsg}); }; socket.on('news', function (data) { console.log(data); socket.emit('my other event', { my: 'data' }); }); socket.on('message',function(data){ console.log(data);}); 

试试这个方法。

  var socket = io.connect('http://...'); console.log(socket.Socket.sessionid);