在SignalR中存储客户机变量的正确方法是什么?

在SignalR中存储客户机变量的正确方法是什么?,signalr,Signalr,目前,我正在使用字典和Context.User.Identity.Name代码,为简洁起见进行压缩: [Authorize] public class ServiceHub : Hub { static private Dictionary<string, HubUserProcess> UserProcesses = new Dictionary<string, HubUserProcess>(); public override Task OnCon

目前,我正在使用字典和Context.User.Identity.Name代码,为简洁起见进行压缩:

[Authorize]
public class ServiceHub : Hub
{
    static private Dictionary<string, HubUserProcess> UserProcesses = new Dictionary<string, HubUserProcess>();

    public override Task OnConnected()
    {
        UserProcesses[Context.User.Identity.Name] = new HubUserProcess();
        return base.OnConnected();
    }

    public override Task OnDisconnected()
    {
        // ... Remove from dictionary if key exists (not shown) ...
        return base.OnConnected();
    }

    // Then I use UserProcesses[Context.User.Identity.Name] in all functions
}

在我的HubUserProcess类中,我有一组web服务,它们使用Context.User.Identity.Name在构造函数中初始化。一位同事说我的方法不安全,所以我最大的担心是一个用户访问另一个用户的私有数据。这些变量可能包含非常敏感的信息。存储客户端变量的正确/安全方法是什么?

IMHO,我看不出有什么问题。伪造身份并非易事,如果有人能做到这一点,那么几乎所有事情的赌注都会落空。您可能需要使用支持多线程的字典,我认为是ConcurrentDictionary,并确保始终使用上下文标识只是一个注释,这样同一用户的所有连接都将共享UserProcesss实例。因此,如果同一个用户打开了两个窗口,他将对两个连接使用相同的用户进程非常好,谢谢大家。