我正在開發Windows應用程序。我需要在win應用程序中模擬會話(我們在網絡應用程序中),如果用戶在一段時間內處於非活動狀態,他將被註銷。用戶登錄狀態在數據庫中維護。在Windows應用程序中模擬會話
任何創新的想法?
我正在開發Windows應用程序。我需要在win應用程序中模擬會話(我們在網絡應用程序中),如果用戶在一段時間內處於非活動狀態,他將被註銷。用戶登錄狀態在數據庫中維護。在Windows應用程序中模擬會話
任何創新的想法?
你不需要會話(或CallContext中,或其他任何東西),只是一個Singleton「用戶存儲」有一個限制:
用戶登錄或表現出一定的活動後,你必須保存日期/那個時間。下一次,當用戶想要做某件事時,只需比較(lastactivity + logouttime)與實際日期/時間。
過程的輪廓依稀可辨:
[User login]
|
!
[User 'store' saves user date + login time]
[This is a singleton ]
...
[Next time user wants to do something. The ]
[program asks user data from the user 'store']
|
!
[If the actual time is greater than user ]
[lastactivity + LOGOUTTIME, user cannot do it]
[If not, then update last activity ]
UserStore可以被實現爲字典並用作:
// Log in
Singleton.UserStore.Add("John", new UserData(yourUserObject, DateTime.Now));
...
// Check (ie. in a property-get)
var userData = Singleton.UserStore["John"];
if (userData.LastActivityDate + _LOGOUTIME > DateTime.Now())
{
throw UserAutomaticallyLoggedOut();
}
else
{
userData.LastActivityDate = DateTime.Now();
}
想到的是當定時器到達零時使用BackgroundWorker註銷用戶。該定時器在用戶進行的每個動作中都重置。或者它甚至可能被掛在鼠標或鍵盤事件上,以便當用戶不移動鼠標或不使用鍵盤時,計時器倒計時直到達到註銷時間。
您可以創建應用程序中的類,它具有某種每次用戶與軟件交互時都會重置的超時值。如果達到超時,則用戶已註銷。
這裏棘手的事情是檢測用戶交互。在ASP.NET中很容易,你基本上只需要檢查頁面請求。在Windows窗體應用程序中,您需要在更詳細的級別上單擊輸入(例如,任何文本框中的任何按鍵都將是用戶交互)。我猜想KeyPreview屬性和窗體上的KeyPress事件監聽器可能是一個很好的前進方向。
嗯,首先,你是什麼意思非活動?在Web上,你試圖模擬沒有的狀態。但是,在客戶端應用程序中,您甚至可以獲得各種事件,甚至是MouseMove。 Onde的想法是,你可以從TextBox,Button等標準輸入控件中創建UserControls,並讓它們在調用事件時更新某種計時器對象。另一個是放棄UserControl的東西,只是更新您創建的每個事件處理程序中的計時器。基於窗體本身的MouseMove或KeyDown事件更新計時器可能會更簡單。
您可能甚至不需要爲此的BackgroundWorker - 只需使用普通的UI線程計時器。 – itowlson 2009-04-29 09:57:34
你可能是對的。 :) – 2009-04-29 10:10:02