你可以依赖socket.id作为UID

时间:2013-04-13 15:36:10

标签: node.js express socket.io

请原谅我的无知,即node.js / socket.io

的第2天

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

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

这是一个糟糕的主意吗?

2 个答案:

答案 0 :(得分:6)

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

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

  1. socket.id应该唯一地标识套接字,因此当单个用户打开多个套接字时会遇到问题。
  2. Socket.IO,在内部大量使用该ID来存储哈希表中的内容,如果更改ID,可能会得到意想不到的结果并且难以追踪错误。我没有测试它,但是看看Socket.IO源代码,这就是我所期望的。
  3. 最好使用其他方法生成ID,然后将用户与套接字关联(例如,在握手期间使用来自cookie的数据)。

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

答案 1 :(得分:1)

创建socket.io套接字时,可以根据需要为套接字对象添加变量。 socket.userid = getUserID()可以正常使用。最好在数据库中配置UID,并在验证成功时将它们添加到套接字对象。