請原諒我的無知,node.js中的第2天/ socket.io你可以依靠socket.id作爲UID
我正在尋找一種方式來唯一地標識用戶在數據庫排隊系統。我讀了很多關於使用Express的會話cookie,但我注意到socket.id似乎是socket.io已經使用的UID。
所以我一直在使用socket.id,以確定我的用戶都在數據庫中,並在創建私有「房間」只有他們溝通。
這是一個可怕的想法?
請原諒我的無知,node.js中的第2天/ socket.io你可以依靠socket.id作爲UID
我正在尋找一種方式來唯一地標識用戶在數據庫排隊系統。我讀了很多關於使用Express的會話cookie,但我注意到socket.id似乎是socket.io已經使用的UID。
所以我一直在使用socket.id,以確定我的用戶都在數據庫中,並在創建私有「房間」只有他們溝通。
這是一個可怕的想法?
套接字ID只是 - 它唯一地標識一個插座。它不能唯一標識一個用戶,並且絕對不打算用於此目的。一個用戶(在許多應用程序中)可能有多個連接(因此多個套接字使用不同的ID)。而且,每次連接時,他們都會被分配一個新的ID。
很顯然你不應該使用一個socket.id
作爲用戶ID。穆斯塔法指出,你可以重新分配socket.id
用戶ID,但我傾向於認爲這是一個非常糟糕的主意,原因有二:
socket.id
應該是唯一標識一個插座,所以你會碰到問題時,單用戶打開多個套接字。更好地使用其他方法生成ID,然後將用戶與套接字相關聯(例如,在使用cookie中的數據握手期間)。
socket.set(key, value, callback)
是明確打算用於將您自己的數據(如用戶ID)與套接字連接相關聯的方法,也是唯一保證安全的方法。
感謝您的信息!對於我正在解決的問題,多個選項卡/會話不是問題,所以很高興聽到我可以將其用於此目的。不過,如果需要識別/保留多個會話,我會考慮使用Cookie。 – Titan
當創建socket.io插座,你可以如你所願的Socket對象添加變量。 socket.userid = getUserID()
會正常工作。最好在數據庫中設置UID,並在認證成功時將它們添加到套接字對象中。
對我來說,最大的問題是,這會在同時運行的多個實例中獨一無二嗎? – kroe