热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Windows应用程序中模拟会话-SimulatingsessioninaWindowsapp

Iamworkingonawindowsapplication.IneedtosimulateSession(thatwehaveinawebapp)inthe

I am working on a windows application. I need to simulate Session (that we have in a web app) in the win app where if the user is inactive for certain period, he gets logged off. The user login status is maintained in the database.

我正在开发一个Windows应用程序。我需要在win app中模拟Session(我们在web应用程序中),如果用户在一段时间内处于非活动状态,他就会被注销。用户登录状态在数据库中维护。

Any innovative ideas???

任何创新的想法???

4 个解决方案

#1


You do not need Session (or CallContext, or anything else), just a Singleton "user store" with one restriction:

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

After the user logged in or showed some activity, you have to save the date/time of that. Next time, when the user wants do something, just compare (lastactivity + logouttime) to the actual date/time.

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

Outline of the process could be:

该过程的大纲可能是:

              [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 can be implemented as a Dictionary and used as:

UserStore可以实现为Dictionary并用作:

// 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


What comes to mind is to use a BackgroundWorker to log off the user when a timer reaches zero. This timer is reset on every action the user makes. Or it could even be hooked to mouse or keyboard events so that when the user doesn't move the mouse or isn't using the keyboard the timer counts down until it reaches the log off time.

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

#3


You could create a class in your application that has some sort of timeout that is reset every time the user interacts with the software. If the timeout is reached, the user is logged out.

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

The tricky thing here is to detect user interaction. In ASP.NET is pretty easy, you essentially need to check only for page requests. In a windows forms application you will need to montor input on a much more detailed level (any key press in any text box will be a user interaction for instance). I guess the KeyPreview property together with a KeyPress event listener on the form might be a good way forward.

这里棘手的是检测用户交互。在ASP.NET中非常简单,您基本上只需要检查页面请求。在Windows窗体应用程序中,您需要在更详细的级别上进行montor输入(例如,任何文本框中的任何按键都将是用户交互)。我猜KeyPreview属性和表单上的KeyPress事件监听器可能是一个很好的方法。

#4


Well, first, what do you mean by inactive? On the Web you are trying to simulate state where there is none. However, in a client app, you get all sorts events even MouseMove. Onde idea is that you could create UserControls out of the standard input controls like TextBox, Button, and so forth and have them update some sort of timer object when events are invoked. The other is to forego the UserControl stuff and just update the timer in each event handler you create. Probably it would be simpler to just update the timer based on the MouseMove or KeyDown events on the Form itself.

那么,首先,你的意思是什么不活跃?在Web上,您试图模拟没有的状态。但是,在客户端应用程序中,即使是MouseMove也可以获得各种事件。 Onde的想法是,您可以使用TextBox,Button等标准输入控件创建UserControl,并在调用事件时让它们更新某种计时器对象。另一种是放弃UserControl的东西,只更新你创建的每个事件处理程序中的计时器。可能只是根据Form本身上的MouseMove或KeyDown事件更新计时器会更简单。


推荐阅读
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 一、Advice执行顺序二、Advice在同一个Aspect中三、Advice在不同的Aspect中一、Advice执行顺序如果多个Advice和同一个JointPoint连接& ... [详细]
  • Irish budget airline Ryanair announced plans to significantly increase its route network from Frankfurt Airport, marking a direct challenge to Lufthansa, Germany's leading carrier. ... [详细]
  • 入门指南:使用FastRPC技术连接Qualcomm Hexagon DSP
    本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 使用C#构建动态图形界面时钟
    本篇文章将详细介绍如何利用C#语言开发一个具有动态显示功能的图形界面时钟。文章中不仅提供了详细的代码示例,还对可能出现的问题进行了深入分析,并给出了解决方案。 ... [详细]
  • 本文探讨了如何将个人经历,特别是非传统的职业路径,转化为职业生涯中的优势。通过作者的亲身经历,展示了舞蹈生涯对商业思维的影响。 ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • 本文探讨了如何通过优化SOAP服务调用和多线程处理来减少生成的事件数量,并提高加载大量实体的效率。 ... [详细]
  • 在 C# 编程中,使用 this 关键字可以简化构造函数的调用和初始化过程。本文将介绍如何通过 this 关键字优化构造函数的实现。 ... [详细]
  • c#  项目文件,C#viual studio使用方法
    一、项目文件1)Properties节点下主要存放的是当前程序集相关的信息,如版本号、标题等。双击”Properties“,打开如下项目属 ... [详细]
author-avatar
wangnan00
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有