Javascript 如何在客户端中获取socket.io客户端的会话id

Javascript 如何在客户端中获取socket.io客户端的会话id,javascript,socket.io,Javascript,Socket.io,我想在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 connect

我想在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,如何获取该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');
  });
});
*请注意:自v0.9起,
set
get
API已被弃用*
以下代码只能用于版本socket.io<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.socket.sessionid 即


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

var socket = io('localhost');
var id = socket.io.engine.id
出于某种原因

socket.on('connect', function() {
    console.log(socket.io.engine.id);
}); 
不适合我。然而

socket.on('connect', function() {
    console.log(io().id);
}); 
他为我工作。希望这对那些在获取id方面也有问题的人有所帮助。顺便说一下,我使用Socket IO>=1.0。

试试这种方法

                var socket = io.connect('http://...');
                console.log(socket.Socket.sessionid);
在服务器端

io.on('connection', socket => {
    console.log(socket.id)
})
在客户端

import io from 'socket.io-client';

socket = io.connect('http://localhost:5000');
socket.on('connect', () => {
    console.log(socket.id, socket.io.engine.id, socket.json.id)
})

如果
socket.id
不起作用,请确保在('connect')上或连接后调用它。

请告诉如何在客户端获取会话id?它在cookie中。要么从那里抓取它(
document.cookie
),要么从服务器显式地将它发送到客户端。我在一个客户端中签入了document.cookie,但它是空的。我们在谈论什么会话id?socket.socket.sessionid,或者如本例中的client.socket.sessionidgot by socket.transport.sessionid.socket.sessionid或socket.transport.sessionid的可能副本,我只能在
socket.on'connect'
@webjay之后才能获得它。是的,属性仅在connect事件上分配,而不是在之前。所以您现在就设置了引擎,如何从服务器获取它?这对我很有用!不必在socket.on'connect'上使用它。对于socket.io 1.4.5thanx的信息,我想socket.io自2013年以来发生了一些变化:)-我将很快对其进行测试并更新我的答案。事件函数接收一个变量,该变量包含您想要的:
io.on('connection',function(client){console.log(client.id);});
io.on('connection', socket => {
    console.log(socket.id)
})
import io from 'socket.io-client';

socket = io.connect('http://localhost:5000');
socket.on('connect', () => {
    console.log(socket.id, socket.io.engine.id, socket.json.id)
})