3

所以基本上我有一个ConcurrentDictionary<string, CustomUserData>. 我想做的是在用户登录时将 SessionId/UserData 对添加到该字典中,并在用户注销或会话超时时将其从字典中删除。这样做的最佳做法是什么。我试图使用 global.asax 事件来实现这一点,但我找不到任何合适的事件。

4

3 回答 3

0

好吧,既然您使用的是 MVC,我假设您使用一些标准的身份验证提供程序。因此,只需找到您负责身份验证控制器,并在适当的控制器操作中为您设置字典,而不是在 global.asax 事件中。

Global.asax用于整个应用程序全局事件,例如应用程序初始化。

于 2013-10-24T07:17:23.740 回答
0

为什么不只使用会话状态?您可以添加一个额外的检查以确保用户已登录?

于 2013-10-24T07:38:45.870 回答
0

我建议使用一些已经存在的身份验证提供程序。例如FormsAuthentication或新的ASP.NET Identity

但是如果你真的想使用字典,你可以创建一个包含这个字典的 BaseController,从这个 BaseController 派生的每个控制器都可以访问它:

public class BaseController : Controller
{
    private ConcurrentDictionary<string, CustomUserData> _users;
    protected ConcurrentDictionary<string, CustomUserData> Users
    {
        get
        {
            if (_users == null)
            {
                _users = new ConcurrentDictionary<string, CustomUserData>();
            }
            return _users;
        }
    }
}

现在您可以从此控制器派生:

public class HomeController : BaseController
{
    // ...
}
于 2013-10-24T07:33:45.523 回答