web-dev-qa-db-fra.com

comment obtenir l'ID de session du client socket.io dans le client

Je veux obtenir l'ID de session du client dans mon client socket.io.

voici mon client 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;

Je veux obtenir l'identifiant de session de ce client, comment puis-je l'obtenir?

43
XMen

Jetez un oeil à mon introduction sur exactement ce sujet.

MISE À JOUR:

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

Sur socket.io> = 1.0, après le déclenchement de l'événement connect:

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

J'ai juste eu le même problème/question et l'ai résolu comme ceci (seulement le code client):

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

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

* Remarque: à partir de la version 0.9, l'API set et get a été déconseillée *

Le code suivant ne doit être utilisé que pour la version socket.io <0.9
Voir : http://socket.io/docs/migrating-from-0-9/



Cela peut être fait par le biais du mécanisme de prise de contact/autorisation.

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

Tous les attributs affectés à l'objet de données sont désormais accessibles via l'attribut de poignée de main de l'objet de connexion socket.io.

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

Pour certaines raisons

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

n'a pas travaillé pour moi. toutefois

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

a fonctionné pour moi. J'espère que cela est utile pour les personnes qui ont également eu des problèmes pour obtenir l'identifiant. J'utilise Socket IO> = 1.0, soit dit en passant.

3
Jelle Blaauw

Essayez à partir de votre code socket.socket.sessionid ie.

    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);});
1
CrIceIs

Essayez de cette façon.

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