问:我如何管理匿名用户,这样,当集线器发送一个响应在一个浏览器多标签都被更新?SignalR C#MVC映射匿名用户于客户端ID
的场景如下:
我想SignalR集成到一个项目,这样匿名用户可以生活与运营商聊天。很明显,用iIdentity进行身份验证的用户通过Client.User(用户名)命令进行映射。但是现在说一个匿名用户正在浏览site.com/tools和site.com/notTools我无法仅用一个connectionID将消息发送到所有选项卡。只有一个标签收集响应。
我一直在使用IWC补丁尝试,但该工具并不占储蓄聊天信息存入数据库,我想通过ajax传递变量是不是读/写数据库的安全方式。
我也看了下面的:Managing SignalR connections for Anonymous user
但是创建基本如使用会话数超过Owin似乎不太安全。
我有想法每个用户连接时间创建一个虚假的帐户使用client.user(),并删除它时,断开连接。但我宁愿不填充我的aspnetusers数据库上下文与垃圾帐户似乎没有必要。
是否有可能使用UserHandler.ConnectedIds.Add(Context.ConnectionId);
也映射一个假的用户名?我不知所措。
会是有意义的使用iUserId供应商?
public interface IUserIdProvider
{
string GetUserId(IRequest request);
}
然后创建一个数据库,将IP地址存储到connectionID和单个用户名?
数据库:
用户:随着FK以连接ID
|userid|username|IP |connectionIDs|
| 1 | user1 |127.0.0.1| 1 |
| 2 | user2 |127.0.0.2| 2 |
connectionIDs:
|connectionID|SignalRID|connectionIDs|
| 1 | xx.x.x.x| 1 |
| 2 | xx.xxx.x| 2 |
| 3 | xx.xxxxx| 2 |
| 4 | xxxxx.xx| 2 |
然后可能写周围的连接逻辑?
public override Task OnConnected()
{
if(Context.Identity.UserName != null){
//add a connection based on the currently logged in user.
}
else{
///save new user to database?
}
}
但问题仍然存在,当在websocket上发送命令时,我将如何处理多个选项卡?
更新 需要明确的是,我的意图是建立一个即时聊天/支持工具,它允许在任何时候都在浏览器的匿名访问。
客户希望类似http://www.livechatinc.com
东西,我已经创建了发送和从集线器接收,不管它是什么域的JavaScript插件。 (我的客户拥有多站点),这个难题最缺乏的部分是管理匿名用户,以允许进行多标签对话。
你想要什么是匿名用户能够从任何打开的浏览器标签聊天到相同的网站(即site.com),对吧? – tede24
@ tede24是的,这是我想要的。 – Chris
难道你不能只是用某种SessionId(Guid)设置一个cookie,为该Id创建一个组并为其订阅所有的连接ID?这样你可以将消息广播到所有标签 – tede24