7

我知道如何在用户连接时检索客户端 sessionID。

但我想随时检索它,例如当客户点击某物时,我希望能够知道谁点击了,他们的 sessionID 是什么。

socket.sessionID不工作,也不socket.handshake.sessionID

例如 :

我有这条快速路线:

.get('/result/:survey', function(req, res) {
    res.redirect('/result/'+req.params.survey+'/1');
})

就在重定向之前,我想让用户加入一个套接字房间,并获得他们的 sessionID。我怎么可能那样做?根据文档,这将是socket.join('room')但我怀疑socket仅代表我与客户端的连接,而不是与其他客户端的连接。也许我只是无法理解套接字!

4

4 回答 4

19

从 1.0 版开始,您可以通过以下方式获取客户端的 sessionid:

var socket = io();
socket.on('connect', function(){
    var sessionid = socket.io.engine.id;
    ...
});
于 2014-06-15T09:18:09.270 回答
3

我不确定您的意思,因为“当客户端单击某物时”假定您的意思是“客户端”(您可以在其中使用socket.socket.sessionid),但“将其存储在客户端数组中”假定您的意思是“服务器- side'(您可以在其中访问它socket.id)。

客户端:

var socket = io.connect();
socket.on('connect', function() {
  var sessionid = socket.socket.sessionid;
  ...
});

服务器端:

io.sockets.on('connection', function(socket) {
  var sessionid = socket.id;
  ...
});
于 2013-11-07T14:34:48.113 回答
0

我将客户端 ID 存储在服务器端事件处理程序中,只需:

// server.js
io.sockets.on('connection', function (client) {
  client.on('event_name', function (_) {
    var clientId = this.id;
  }
}
于 2013-11-07T14:37:03.757 回答
0

我使用的是 socket.io 2.0.4 版,您可以随时通过this.id在处理程序中使用来访问客户端 ID。例如:

socket.on('myevent',myhandler);
function myhandler(){
    console.log('current client id: '+this.id);
}

显然,处理函数是在 Socket 上下文本身中执行的,这同样可以让您访问其他自属性,例如client(连接的客户端对象)、request(正在处理的当前请求对象)等。您可以在此处查看完整的 API https:/ /socket.io/docs/server-api/#socket

于 2017-11-11T18:15:29.313 回答