我正在开发一个windows应用程序。我需要在win应用程序中模拟会话(我们在web应用程序中有),如果用户在一定时间内处于不活动状态,他将被注销。用户登录状态在数据库中维护。
有什么创新的想法吗?
发布于 2009-04-29 09:56:12
您不需要会话(或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();
}发布于 2009-04-29 09:54:54
我想到的是,当计时器达到零时,使用BackgroundWorker注销用户。该计时器在用户执行的每一次操作时都会重置。或者,它甚至可以与鼠标或键盘事件挂钩,以便当用户不移动鼠标或不使用键盘时,计时器倒计时,直到到达注销时间。
发布于 2009-04-29 09:56:22
您可以在应用程序中创建一个类,该类在每次用户与软件交互时都会重置某种超时。如果到达超时时间,则用户将注销。
这里的棘手之处在于检测用户交互。在ASP.NET中是非常简单的,你基本上只需要检查页面请求。在windows forms应用程序中,您需要在更详细的级别上监控输入(例如,任何文本框中的任何按键都将是用户交互)。我认为在表单中结合使用KeyPreview属性和KeyPress事件侦听器可能是一种很好的方法。
https://stackoverflow.com/questions/801651
复制相似问题