我正在實施一個應用程序,其中使用該應用程序的公司中的每臺機器都有一名技工。我試圖實現用戶策略,如果用戶身處「機械師」角色 - 用戶名爲Machine1,並且已登錄該機器,則只有一個用戶可以同時使用Machine1用戶名登錄公司。 如果其他人試圖用相同的用戶名登錄,應該阻止並通知已登錄的用戶。當會話超時到期時,我應該註銷登錄的用戶並釋放要使用的登錄名。當用戶自己註銷時也會發生同樣的情況。我試圖在asp.net MVC 4應用程序上構建它。如何使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是與數據庫中相同。
我看到提到兩個用戶都在用戶組中名稱「Mechanic」和以相同帳戶名稱登錄的用戶。你將哪一個基於你的單人政策?另外,我想知道只能由一個人同時使用的Web應用程序的好處是什麼。 – Flater
我編輯了問題 – dlght
_「但在這種情況下,我需要在MVC應用程序中更改會話超時中的登錄標誌以寫入數據庫,如果許多用戶登錄,這看起來過度。」_ - 你是什麼意味着「矯枉過正」?當用戶忘記或忘記用戶時,是否要註銷用戶?它不起作用嗎?你擔心它不會有效嗎?只要嘗試像這樣實現它,請參閱[如何獲得會話結束的通知?](http://stackoverflow.com/questions/1413407/),並在遇到實際問題時返回。 – CodeCaster