Socket.io:在任何时候获取客户端会话ID
我知道如何检索用户连接时的客户端会话ID。
但是,我想随时找回它,例如当客户点击某个东西时,我想知道是谁点了什么,他们的sessionID是什么。
socket.sessionID
不起作用,也没有socket.handshake.sessionID
例如 :
我有这个快车路线:
.get('/result/:survey', function(req, res) { res.redirect('/result/'+req.params.survey+'/1'); })
就在redirect之前,我想让用户join一个套接字空间,并获得他们的sessionID。 我怎么可能这样做? 根据文档,这将是socket.join('room')
但我怀疑socket
只代表我与客户端,而不是与其他客户端的连接。 也许我只是无法理解套接字!
从版本1.0开始,您可以通过这种方式获得客户端的sessionid:
var socket = io(); socket.on('connect', function(){ var sessionid = socket.io.engine.id; ... });
我不确定你的意思,因为“当客户端点击某个东西时”假定你的意思是“客户端”(你可以使用socket.socket.sessionid
),但是将其存储在一个客户端arrays中你的意思是“服务器端”(你可以通过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; ... });
我将客户端ID存储在服务器端事件处理程序中,只需:
// server.js io.sockets.on('connection', function (client) { client.on('event_name', function (_) { var clientId = this.id; } }
我使用的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