记录用户登录以报告客户端超过许可证数量

use*_*212 2 c# sql

我是商业Windows应用程序(c#)的首席开发人员.新要求是跟踪滥用许可证的客户.

例如:假设客户购买了10个用户许可协议,即在任何给定时间内同时拥有10个用户.

我需要能够报告,回顾历史,客户有超过10个用户同时登录的所有时间.

我已经有一个包含列的User表:userid(主键),pw,lastLogin,lastLogout.

我正在考虑创建一个新的"日志记录"表,每次用户注销时都会添加一个新行...列可能包括:

LogId,UserId,LoginDateTime,LogoutDateTime

...然后我会有一个用户每次登录/退出应用程序的历史记录...

但是我不确定这个表设计是否会为报告提供有效的计算...我是否使用SQL或c#来执行计算对我来说无关紧要,只要它相当快......

希望有人可能对如何更好地设计此表有一个好主意,以便我可以快速计算客户超出许可限制时的任何/所有时间点.

注意:我不想阻止11t,12th等用户使用该应用程序...要求是向用户显示警告消息但允许他继续工作...

Dan*_*ull 5

将开始和结束会话视为需要记录的事件.您创建一个表来记录这些事件.

因此,一个开始和结束的会话将在表中有两个条目 - 一个用于会话开始,一个用于会话结束.您只需向表中添加记录,从不修改以前的记录.该表可以非常简单地通过向记录添加"会话计数"字段来跟踪打开会话的数量,该字段在会话开始事件发生时从先前记录的会话计数值递增并且在会话结束事件发生时递减.

"会话计数"列现在为我们提供了并发会话数随时间变化的分段连续函数.

示例数据:

    SessionId  EventType  .... your session data here ... SessionCount   
1.     1         Login         ................                 1
2.     2         Login         ................                 2
3.     3         Login         ................                 3
4.     1         Logout        ................                 2
5.     4         Login         ................                 3
6.     4         Logout        ................                 2
7.     2         Logout        ................                 1
8.     3         Logout        ................                 0
9.     5         Login         ................                 1
10.    6         Login         ................                 2
Run Code Online (Sandbox Code Playgroud)

需要担心的事情:

  1. 您必须确保配对开始/结束事件,因此如果发生任何故障,仍必须生成会话结束事件.
  2. 你需要桌子防篡改吗?如果是这样,我也有一种技术.

编辑:请注意,我把"你的会话数据放在这里",我的意思是"你的会话事件数据在这里".时间戳等信息会在此处输入.应使用另一个表来跟踪两个事件共有的会话信息,例如拥有会话的用户的身份(对两个表使用相同的SessionId密钥).