当前位置: 首页 > 编程语言 > C#

记录用户登录以报告客户端超出许可计数Share

时间:2023-04-10 20:29:57 C#

记录用户登录以报告客户端超出许可计数一项新要求是跟踪滥用许可证的客户。示例:假设客户购买了一份10用户许可协议,即在任何给定时间同时有10个用户。我需要能够报告和查看历史记录,每次客户端都有超过10个用户同时登录。我已经有一个包含列的用户表:userid(主键)、pw、lastLogin、lastLogout。我正在考虑创建一个新的“日志记录”表,每次用户注销时都会添加一个新行......列可能包括:LogId,UserId,LoginDateTime,LogoutDateTime...然后我会为每个人都有一个表用户登录/注销应用程序历史记录的时间......但我不确定这种表格设计是否会为报告提供有效的计算......我是否使用SQL或c#来执行计算对我来说无关紧要只要它相当快...希望有人可能对如何更好地设计它有一些想法拥有这张表是个好主意,这样我就可以在客户超过许可限制时快速计算任何/所有时间点。注意:我不想阻止11t、12th等用户使用该应用程序...要求是向用户显示警告消息,但允许他继续工作...将开始和结束会话视为事件需要记录。您创建一个表来记录这些事件。因此,开始和结束的会话将在表中有两个条目-一个用于会话开始,一个用于会话结束。您只需向表中添加记录,而不会修改以前的记录。该表可以非常简单地通过向记录添加“会话计数”字段来跟踪打开会话的数量,该字段在会话开始事件时从先前记录的会话计数值递增,并在会话结束事件时递减。“会话计数”列现在为我们提供了随时间变化的并发会话数的分段连续函数。示例数据:SessionIdEventType....您的会话数据在这里...SessionCount1.1登录....12.2登录............23.3登录.....................34.1注销.....................25.4登录...........................36.4注销.....................27.2注销................18.3注销.....................09.5登录.....................110.6登录........................2需要担心的事情:必须确保配对开始/结束事件,因此如果发生任何故障,您仍然必须生成Session结束事件。您需要表格防篡改吗?如果是这样,我也有技术。编辑:请注意,当我将“您的会话数据放在这里”时,我的意思是“您的会话事件数据放在这里”。此处输入时间戳等信息。应该使用另一个表来跟踪两个事件共有的会话信息,例如拥有会话的用户的身份(对两个表使用相同的SessionId键)。另一种选择是创建用户会话表。当用户登录时,将他们的会话插入表中。当他们注销时,将其删除。通过这种方式,您始终可以轻松地了解有多少用户已连接。然后你可以在插入时创建一个触发器(也许删除),你可以根据会话计数从那里记录。如果您同时记录删除,您可以了解他们使用过多用户的时间有多长。还要记住,您必须正确清理孤立的连接。我会小心地以这种方式实施许可证检查,因为(如丹尼尔的回答所述,如果您的应用程序崩溃,或者即使用户以特定方式退出它,您也不会收到注销事件(来自任务管理器的结束进程,ALT+F4,而不是通过文件|退出等)。所以你可以想象当用户使用应用程序时会有越来越多的死会话。你不仅可以获得关于用户的不良数据而且印象更重要的是,他们会因收到不应有的警告信息而感到沮丧。如果您试图告诉他们他们实际上并没有违反许可证,他们可能会非常反感。失去客户的好方法。我想说一个合理的许可证检查方案需要中央服务器以外的客户端控制,以及客户端访问互联网。它可能是这样的:当启动应用程序时,程序通知许可证服务器一个新的会话;当应用程序运行时,程序会定期(比如1x5分钟左右)向许可证服务器发送状态信号;正常退出程序时,向许可证服务器发送会话结束信号;如果在该过程的10分钟内未收到状态信号,则认为会话已被许可服务器终止。注意:这已在之前处理过。我见过的最好的选择是由未注册用户维护并从数据库事务活动派生的MRU堆栈的用户活动(在这种情况下为深度10)-从atableWHERE中选择前10个不同的用户代码(最近的事务类型未记录)out")ORDERBYtimestampDESC。每当有人访问不属于最新10个系统的系统时,您有两个选择。您允许他们登录,并让最早的注销(这会造成麻烦,但让他们继续工作(第一个选项),或者你只是强制执行限制(使用第二个选项)。我建议使用短信功能,如提醒你或通过网络登录,这样你就可以跟踪谁在做什么......但前提是他们超过限制。(研究WCF有几种方法可以做到这一点)这样你就可以跟踪它们的使用情况。为真实数据额外收费或重新谈判合同变得有意义。如果您擅长客户服务,那么这不应该激怒他们,尤其是当您指出您需要一个基础架构来为精心设计的用户群提供服务时。据推测,您也很清楚他们的许可方案......使用(LogId,UserId,LoginDateTime,LogoutDateTime)的表结构很难聚合-很容易查询以查看给定时间使用系统的每个人时间,但很难始终如一地获得用户数。一种可能的方法是对数据进行非规范化-并使用单位而不是跨度进行记录。您可以使用表结构(UserId、BlockDateTime)来跟踪30分钟块中的使用情况。如果BettyR从10:05AM到11:45AM使用系统,则在表中创建4条记录:BettyR,10:00amBettyR,10:30amBettyR,11:00amBettyR,11:30am然后可以使用Aplain带有groupby子句的SQL查询每半小时查找使用系统的不同用户数。select...fromUsageBlocksgroupbyBlockDateTimehavingcount(*)>10根据您的要求,您可以使用报告应用程序对这些特定时间段执行更深入的分析。以上是C#学习教程:记录用户登录报告客户端分享的所有内容超过许可数。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,并不代表侵权,如有侵权,请点击右边联系管理员删除。如需转载请注明出处: