Node.js 您可以依赖socket.id作为UID吗

Node.js 您可以依赖socket.id作为UID吗,node.js,express,socket.io,Node.js,Express,Socket.io,请原谅我的无知,node.js/socket.io的第2天 我正在寻找一种在数据库队列系统中唯一标识用户的方法。我读了很多关于使用Express会话cookie的文章,但是我注意到socket.id似乎是socket.io已经在使用的UID 因此,我一直在使用socket.id在数据库中标识我的用户,并在创建私人房间时仅与他们通信 这是一个糟糕的想法吗?创建socket.io套接字时,您可以根据自己的意愿向socket对象添加变量。socket.userid=getUserID可以正常工作。最好

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

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

因此,我一直在使用socket.id在数据库中标识我的用户,并在创建私人房间时仅与他们通信


这是一个糟糕的想法吗?

创建socket.io套接字时,您可以根据自己的意愿向socket对象添加变量。socket.userid=getUserID可以正常工作。最好在数据库中创建辅助UID,并在其身份验证成功时将其添加到套接字对象。

创建socket.io套接字时,您可以根据需要添加变量以插入套接字对象。socket.userid=getUserID可以正常工作。最好在数据库中创建辅助UID,并在其身份验证成功时将其添加到套接字对象。

套接字ID就是这样,它唯一地标识套接字。它并不是唯一标识用户的,而且它肯定不打算用于此目的。许多应用程序中的单个用户可能有多个连接,因此可能有多个ID不同的套接字。此外,每次连接时,都会为其分配一个新ID

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

socket.id应该唯一标识一个套接字,因此当一个用户打开多个套接字时,您会遇到问题。 IO在内部大量使用该ID来存储哈希表中的内容,如果更改该ID,可能会得到意外的结果,并且很难跟踪bug。我还没有测试它,但看看Socket.IO源代码,这就是我所期望的。 最好使用另一种方法生成ID,然后将用户与套接字关联,例如,在握手过程中使用来自cookie的数据


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

套接字ID就是这样一种方法-它唯一地标识套接字。它并不是唯一标识用户的,而且它肯定不打算用于此目的。许多应用程序中的单个用户可能有多个连接,因此可能有多个ID不同的套接字。此外,每次连接时,都会为其分配一个新ID

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

socket.id应该唯一标识一个套接字,因此当一个用户打开多个套接字时,您会遇到问题。 IO在内部大量使用该ID来存储哈希表中的内容,如果更改该ID,可能会得到意外的结果,并且很难跟踪bug。我还没有测试它,但看看Socket.IO源代码,这就是我所期望的。 最好使用另一种方法生成ID,然后将用户与套接字关联,例如,在握手过程中使用来自cookie的数据


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

感谢您提供此信息!对于我正在解决的问题来说,多选项卡/会话不是一个问题,因此很高兴听到我可以将其用于此目的。但是,如果需要识别/持久化多个会话,我会使用cookies。谢谢您提供的信息!对于我正在解决的问题来说,多选项卡/会话不是一个问题,因此很高兴听到我可以将其用于此目的。但是,如果需要识别/持久化多个会话,我会考虑使用cookie。对我来说,最大的问题是,这在同时运行的多个实例中是否唯一?对我来说,最大的问题是,这在同时运行的多个实例中是否唯一?