小编典典

记录用户登录信息,以报告客户端超出许可证数量

sql

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

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

我需要能够回顾过去的所有时间,报告客户同时登录了10个以上的用户。

我已经有一个带有列的用户表:userid(主键),pw,lastLogin,lastLogout。

我正在考虑创建一个新的“日志”表,每次用户注销时都会在其中添加新行…列可能包括:

LogId,UserId,LoginDateTime,LogoutDateTime

…然后我将拥有用户每次登录/登出应用程序的历史记录…

但是我不确定此表设计是否可以进行有效的计算以生成报告…我使用SQL还是c#进行计算对我来说都没有关系,只要它相当快…

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

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


阅读 290

收藏
2021-03-17

共1个答案

小编典典

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

因此,一个开始和结束的会话在表中将有两个条目-
一个用于会话开始,另一个用于会话结束。您只将记录添加到表中,而不修改以前的记录。该表现在可以非常简单地跟踪打开的会话数,方法是在记录中添加一个“会话计数”字段,该字段在会话开始事件发生时从前一个记录的会话计数值开始增加,而在会话结束事件发生时减少。

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

示例数据:

    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

需要担心的事情:

  1. 您必须确保将开始/结束事件配对,以便在发生任何失败的情况下,仍必须生成会话结束事件。
  2. 您需要桌子防篡改吗?如果是这样,我也有一种技巧。

编辑:请注意,在我放置“您的会话数据在这里”的地方,我的意思是“您的会话事件数据在这里”。诸如时间戳之类的信息将在此处输入。应该使用另一个表来跟踪两个事件共有的会话信息,例如拥有会话的用户的身份(两个表使用相同的SessionId密钥)。

2021-03-17