Как получить идентификатор сеанса клиента socket.io в клиенте
Я хочу получить идентификатор сеанса клиента в моем клиенте socket.io.
вот мой клиент 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;
Я хочу получить идентификатор сеанса этого клиента, как я могу это получить?
Ответы
Ответ 1
Посмотрите мой праймер именно на эту тему.
UPDATE:
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');
});
});
Ответ 2
В socket.io >= 1.0 после запуска события connect:
var socket = io('localhost');
var id = socket.io.engine.id
Ответ 3
* Обратите внимание: с v0.9 API set
и get
устарел *
Следующий код следует использовать только для версии 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 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);
});
Ответ 4
У меня была одна и та же проблема/вопрос и решил ее так (только код клиента):
var io = io.connect('localhost');
io.on('connect', function () {
console.log(this.socket.sessionid);
});
Ответ 5
По какой-то причине
socket.on('connect', function() {
console.log(socket.io.engine.id);
});
не работал у меня. Однако
socket.on('connect', function() {
console.log(io().id);
});
действительно работал у меня. Надеюсь, это полезно для людей, у которых также были проблемы с получением идентификатора. Кстати, я использую Socket IO >= 1.0.
Ответ 6
Попробуйте использовать свой код
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);});
Ответ 7
Попробуйте этот путь.
var socket = io.connect('http://...');
console.log(socket.Socket.sessionid);
Ответ 8
На стороне сервера
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')
или после подключения.