你可以依靠socket.id作为一个UID

请原谅我的无知,第二天的node.js / socket.io

我正在寻找一种方法来唯一标识用户在数据库排队系统中使用。 我读了很多关于使用Express的会话cookie,但是我注意到socket.id似乎是socket.io已经使用的UID。

因此,我一直使用socket.id来标识数据库中的用户,并创build私人“房间”来与他们进行通信。

这是一个可怕的主意吗?

套接字ID就是这样 – 它唯一标识一个套接字。 它不能唯一标识一个用户,而且绝对不是用于这个目的的。 单个用户(在许多应用程序中)可能有多个连接(因此多个套接字具有不同的ID)。 而且,每次连接时都会分配一个新的ID。

所以你显然不应该使用一个socket.id作为用户ID。 穆斯塔法指出,你可以重新分配给用户ID的socket.id ,但我倾向于认为这是一个非常糟糕的主意有两个原因:

  1. socket.id应该唯一标识一个套接字,所以当单个用户打开多个套接字时,会遇到问题。
  2. Socket.IO,在内部使用这个ID来存储哈希表中的东西,如果你改变ID,你可能会得到意想不到的结果,很难追踪到错误。 我没有testing过,但看着Socket.IO的来源,这是我所期望的。

最好使用另一种方法生成ID,然后将用户与套接字相关联(例如,在使用cookie中的数据握手期间)。

socket.set(key, value, callback)是明确用于将自己的数据(如用户ID)与套接字连接相关联的方法,也是唯一保证安全的方法。

在创buildsocket.io套接字时,可以根据需要向套接字对象添加variables。 socket.userid = getUserID()将正常工作。 最好在数据库中创buildUID,并在authentication成功时将它们添加到套接字对象中。