C# 匿名用户的信令保持连接

C# 匿名用户的信令保持连接,c#,signalr,session-cookies,asp.net-core-2.0,asp.net-core-signalr,C#,Signalr,Session Cookies,Asp.net Core 2.0,Asp.net Core Signalr,我有一个可供匿名用户使用的信号器聊天。我需要一种方法来映射用户,以便在页面重新加载时保持连接,如果用户有多个选项卡,他们应该在每个选项卡上显示消息 如果使用Context.ConnectionId,则每次重新加载页面都会创建一个新连接。我想使用单用户组映射这些连接。 对于登录的用户,我使用Context.User.Identity.Name: Groups.AddAsync(Context.ConnectionId, Context.User.Identity.Name); 是否有类似的方法获

我有一个可供匿名用户使用的信号器聊天。我需要一种方法来映射用户,以便在页面重新加载时保持连接,如果用户有多个选项卡,他们应该在每个选项卡上显示消息

如果使用
Context.ConnectionId
,则每次重新加载页面都会创建一个新连接。我想使用单用户组映射这些连接。

对于登录的用户,我使用
Context.User.Identity.Name

Groups.AddAsync(Context.ConnectionId, Context.User.Identity.Name);

是否有类似的方法获取匿名用户的“身份”?从我所读到的,会话不应该在信号中心使用,但我找到的所有信息都是旧的,所以我可能在这里错了

重新加载页面时,现有连接将关闭,新连接将打开。新连接将有一个新的连接id,在服务器端,您将无法知道是哪个用户启动了它。根据您的情况,您可以尝试通过用户的ip地址来识别用户-即,在连接打开时存储用户ip,然后在新连接打开时检查您是否已经看到该ip。但是,这可能不起作用,因为同一用户实际上可以拥有不同的ip,而多个用户可以拥有相同的ip。另一种方法是在打开连接时在查询字符串中发送客户端生成的标识符,并使用该标识符来标识服务器端的同一用户。

您必须实现某种机制来为每个用户创建唯一的ID

我会像下面这样做

  • 在用户实际连接到集线器之前,我将创建一个唯一的ID和 把它放在饼干里

  • 使用此cookie的值设置信号器URL的查询字符串,以便 每个对hub的调用都将使用用户ID

  • 现在,即使当用户刷新页面时,旧的连接也会被删除 通过信号器自动从组中删除,您可以 继续添加映射到唯一生成的 身份证


如果你不想让他们确认自己的身份,那没关系。但您可以为它们指定一个名称,并将其另存为cookie或会话变量。你也可以让他们编辑它。