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