我的應用程序我不希望同一用戶名同時登錄,所以我有和想法但我不確定它是否正確。在asp.net中控制用戶的在線狀態
1)當用戶登錄,更新狀態(在數據庫用戶表中的「isOnLine」欄),並保存其登錄時間在會議上,是這樣的:
裏面的登錄方法:
DateTime ltime=Datetime.now();
Dbservice.executeSql(update User set(isOnLine,lastLoginTime) value("1",ltime));
Session["logintime"]=ltime;
當另一個用戶嘗試登錄時,檢查該表以查看該用戶的狀態是否被登錄。如果是,請將「isOnline」設置爲「0」,然後他可以立即登錄。
2)在每一個受保護的頁面的Page_Onload()方法,檢查是否在會話中的登錄時間是等於分貝時間:
string logtime=Dbservice.executeSelect("select lastLoginTime from user where xxxxx").Rows[0]["lastLoginTime"];
if(!Session["logintime"]==logtime){
//this user should offline now,redirect it to the login page
}
我不知道如果我的方式正確與否?
此外,我必須在每個受保護頁面的Page_onLoad方法中編寫檢查邏輯,所以有太多重複代碼,有什麼想法可以避免這種情況?
由於我們網站的所有頁面都受到保護!
謝謝。
UPDATE:
它不是在同一時間讓兩個用戶在線,但允許具有正確pasword可以前者用戶下線強制用戶以後。例如:
user1以「username = bill」登錄並且 「password = 000」,那麼他現在在線。
然後user2的嘗試 「用戶名=法案」和 「密碼= 123」登錄,因爲他的密碼是 無效,所以他的請求被拒絕。
用戶3嘗試 「用戶名=法案」和 「密碼= 000」登錄,因爲他的密碼是 有效的,所以他可以選擇做 用戶1脫機。
在這種情況下,當後來的用戶登錄成功時,但前一個用戶的會話也存在,因此我必須根據會話中的「logintime」檢查它是否在線。
@VinayC:這是我的錯,我更新了我的問題。請檢查::) – hguser 2011-05-02 09:16:18
@hguser,如果僅在成功登錄後纔在數據庫中創建條目,則不需要檢查。 – VinayC 2011-05-02 09:45:35
但是在步驟「在登錄時,如果在db中存在同一用戶的活動會話,則用戶無法登錄」,這取決於如果他的密碼正確,他可以強制登錄的用戶脫機。 – hguser 2011-05-02 12:50:15