首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Windows应用程序中模拟会话

在Windows应用程序中模拟会话
EN

Stack Overflow用户
提问于 2009-04-29 09:48:36
回答 4查看 671关注 0票数 2

我正在开发一个windows应用程序。我需要在win应用程序中模拟会话(我们在web应用程序中有),如果用户在一定时间内处于不活动状态,他将被注销。用户登录状态在数据库中维护。

有什么创新的想法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-04-29 09:56:12

您不需要会话(或CallContext或其他任何东西),只需要一个Singleton“用户存储”,但有一个限制:

在用户登录或显示某些活动后,您必须保存该活动的日期/时间。下一次,当用户想要做某事时,只需将(lastactivity + logouttime)与实际的日期/时间进行比较。

该过程的概要可以是:

代码语言:javascript
复制
              [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可以作为字典实现,并用作:

代码语言:javascript
复制
// 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();
}
票数 2
EN

Stack Overflow用户

发布于 2009-04-29 09:54:54

我想到的是,当计时器达到零时,使用BackgroundWorker注销用户。该计时器在用户执行的每一次操作时都会重置。或者,它甚至可以与鼠标或键盘事件挂钩,以便当用户不移动鼠标或不使用键盘时,计时器倒计时,直到到达注销时间。

票数 2
EN

Stack Overflow用户

发布于 2009-04-29 09:56:22

您可以在应用程序中创建一个类,该类在每次用户与软件交互时都会重置某种超时。如果到达超时时间,则用户将注销。

这里的棘手之处在于检测用户交互。在ASP.NET中是非常简单的,你基本上只需要检查页面请求。在windows forms应用程序中,您需要在更详细的级别上监控输入(例如,任何文本框中的任何按键都将是用户交互)。我认为在表单中结合使用KeyPreview属性和KeyPress事件侦听器可能是一种很好的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/801651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档