【问题标题】:how to get session id of socket.io client in Client如何在客户端中获取 socket.io 客户端的会话 ID
【发布时间】:2011-10-22 05:46:07
【问题描述】:

我想在我的 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,如何获取?

【问题讨论】:

标签: javascript socket.io


【解决方案1】:

看看 my primer 就知道这个话题了。

更新:

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');
  });
});

【讨论】:

  • 请告诉如何在客户端获取会话ID?
  • 在 cookie 中。要么从那里抓取它 (document.cookie),要么从服务器显式发送给客户端。
  • 我在连接的一个客户端中签入了 document.cookie,但它是空白的。
  • 我们在谈论什么会话 id?
  • socket.socket.sessionid,或本例中的client.socket.sessionid
【解决方案2】:

在 socket.io >=1.0,连接事件触发后:

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

【讨论】:

  • socket.on 'connect'之后才能拿到
  • @webjay 是的,属性只在连接事件上分配,而不是之前。
  • 所以你现在设置引擎如何从服务器获取它?
  • 对我有用!不必在 socket.on 'connect' 上使用它
【解决方案3】:

我刚刚遇到同样的问题/问题并像这样解决了它(仅限客户端代码):

var io = io.connect('localhost');

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

【讨论】:

  • 使用 socket.io 1.4.5 为我返回了“未定义”
  • 感谢信息,我猜 socket.io 自 2013 年以来发生了一些变化 :) - 我将很快对其进行测试并更新我的答案。
【解决方案4】:

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

以下代码应仅用于版本 socket.io
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 连接对象的握手属性访问。

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

【讨论】:

    【解决方案5】:

    在服务器端

    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 不起作用,请确保在on('connect') 或连接后调用它。

    【讨论】:

      【解决方案6】:

      由于某种原因

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

      对我不起作用。不过

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

      确实为我工作。希望这对那些在获取 id 方面也有问题的人有所帮助。顺便说一句,我使用 Socket IO >= 1.0。

      【讨论】:

      • 事件函数接收一个变量,里面有你想要的:io.on('connection', function(client) { console.log(client.id); });
      【解决方案7】:

      从您的代码中尝试 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);});
      

      【讨论】:

        【解决方案8】:

        试试这个方法。

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

        【讨论】:

          猜你喜欢
          • 2014-07-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-02
          • 2022-01-21
          • 2014-10-01
          • 1970-01-01
          • 2015-03-16
          相关资源
          最近更新 更多