Javascript 如何在客户端中获取socket.io客户端的会话id
我想在socket.io客户端中获取客户端的会话id 这是我的socket.io客户端: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
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)
})