请原谅我的无知,node.js/socket.io 的第 2 天
我正在寻找一种方法来唯一标识用户以在数据库排队系统中使用。我阅读了很多关于使用 Express 的会话 cookie 的内容,但是我注意到 socket.id 似乎是 socket.io 已经在使用的 UID。
因此,我一直在使用 socket.id 在数据库中识别我的用户,并创建私人“房间”来与他们进行通信。
这是一个可怕的想法吗?
套接字 ID 就是这样 - 它唯一地标识一个套接字。它不会唯一标识用户,而且绝对不打算用于此目的。单个用户(在许多应用程序中)可能有多个连接(因此有多个具有不同 ID 的套接字)。此外,每次他们连接时,他们都会被分配一个新的 ID。
所以你显然不应该使用 asocket.id
作为用户 ID。Mustafa 指出您可以重新分配socket.id
给用户 ID,但我倾向于认为这是一个非常糟糕的主意,原因有两个:
socket.id
应该唯一标识一个套接字,因此当单个用户打开多个套接字时会遇到问题。最好使用另一种方法生成 ID,然后将用户与套接字相关联(例如,在握手期间使用来自 cookie 的数据)。
socket.set(key, value, callback)
是明确用于将您自己的数据(如用户 ID)与套接字连接相关联的方法,并且是唯一保证安全的方法。
创建 socket.io 套接字时,您可以根据需要向套接字对象添加变量。socket.userid = getUserID()
会正常工作。最好在数据库中分配 UID,并在身份验证成功时将它们添加到套接字对象中。