Express 如何在socket.io中检测相同的客户端

Express 如何在socket.io中检测相同的客户端,express,socket.io,Express,Socket.io,我正在尝试与express.js和socket.io进行聊天。 目前,“我的聊天室”中的用户可以在同一浏览器上打开多个选项卡,并可以在所有这些选项卡上聊天。这意味着同一个客户端可以同时与几个人聊天。我想阻止这种行为 我想阻止客户端每次连接聊天时: 1) 客户端在同一浏览器的不同选项卡上工作 2) 客户端打开了不同的浏览器并在它们上面工作 我怎么能做到? 谢谢 通过使用Cookie标识特定浏览器,您可以从同一浏览器的不同选项卡检测同一用户。在第一次连接(socket.io或express请求)时,

我正在尝试与express.js和socket.io进行聊天。 目前,“我的聊天室”中的用户可以在同一浏览器上打开多个选项卡,并可以在所有这些选项卡上聊天。这意味着同一个客户端可以同时与几个人聊天。我想阻止这种行为

我想阻止客户端每次连接聊天时:

1) 客户端在同一浏览器的不同选项卡上工作

2) 客户端打开了不同的浏览器并在它们上面工作

我怎么能做到?
谢谢

通过使用Cookie标识特定浏览器,您可以从同一浏览器的不同选项卡检测同一用户。在第一次连接(socket.io或express请求)时,设置唯一的cookie标识符,然后在后续连接中,检查该唯一cookie标识符是否已在使用。您必须在特定的应用程序中定义“正在使用”的含义。对于socket.io连接,这要容易一些,因为这意味着当前已经有一个活动连接。对于快速请求来说,这有点困难,因为请求是暂时的,所以您必须决定如何区分不同选项卡与导航到新页面的一个选项卡之间的差异(这是特定于应用程序的方法)


为了检测多个浏览器,您必须进行用户身份验证,并且假设用户没有创建多个帐户,或者使用某种系统来防止同一用户创建多个帐户。然后,您可以在cookie中使用帐户身份验证凭据,就像上一个示例一样,来判断此用户的会话是否已被使用。

首先,感谢您的帮助!!!对于第一种情况,您是对的-cookie或会话将足以检测在同一浏览器上但在多个选项卡上工作的同一用户。但是对于第二种情况,我不想同时提供用户身份验证。我看到一个聊天可以检测到在多个浏览器上工作的同一个客户端,这个聊天可以在没有用户身份验证的情况下工作。我也想这么做。我想我找到了解决我问题的单一方法。如果我们使用一个
socket.handshake.address
来获取客户端的ip地址,那么每当客户端从同一台机器上通过套接字打开连接时,我们都可以检测到该客户端。@Emil-由于代理和NAT以及专用网络上的用户,无法保证ip地址唯一地对应于单个用户。一个网站会看到所有来自我家的用户(都来自他们自己的电脑)都是相同的IP地址,因为我们家路由器中有NAT。对于来自公司的用户也是如此。因此,如果您仅使用IP地址,您将错误地拒绝用户的第一次连接,因为同一专用网络上的其他人正在使用您的服务。