我正在实施一个应用程序,其中使用该应用程序的公司中的每台机器都有一个机制.我正在尝试实现一个用户策略,如果用户处于"Mechanic"角色 - 用户名为Machine1,并且已登录该机器,则只有一个用户可以使用Machine1用户名同时登录公司.如果其他人尝试使用相同的用户名登录,则应阻止该用户名并告知已登录用户.当会话超时到期时,我应该注销登录用户并释放要使用的登录名.当用户自己注销时也会发生同样的情况.我正在尝试在asp.net MVC 4应用程序上构建它.
我曾想过在数据库中使用SessionId,UserId和IsLoggedIn布尔值.但在这种情况下,我需要更改MVC应用程序中会话超时的登录标志以写入数据库,如果许多用户登录,这似乎有点过分.
实施会是什么样的?我应该使用哪些方法或属性来处理数据库中的会话管理?
FYI
我已经制作了自己的方法,我检查用户是否已登录,这里是:
public static bool ValidateUser(string username, string password, string companyName) { int? companyId = myRepository.GetCompanyId(companyName); int? userId = companyId == 0 ? null : myRepository.GetUserId(username, companyId); if (userId.HasValue && userId.Value != 0) { var userKey = Security.GenerateUserKey(username, companyName); return WebSecurity.Login(userKey, password); } else { return false; } }
在这个方法中,我可以检查会话ID是否与数据库中的相同.