在ASP.NET中,我正在寻找一种方法来审核离开我的应用程序的用户。具体来说,当用户的会话因任何原因被放弃/销毁时,我想在SQL Server的审计表中插入一个“注销”记录(不一定是因为调用了session.abandon)

我有一个'SessionHelper'类来管理会话setter / getters。

我已尝试在Global.asax的Session_End中回帖,但即使在超时到期后它也从未触发此事件。

我已经尝试在SessionHelper类中重写'finalize'并在类被销毁时执行此操作,但它也没有触发该事件。

我尝试在SessionHelper中实现IDisposable,但我不知道在哪里调用它以便始终调用它。

审核退出ASP.NET应用程序的用户的正确方法是什么?

谢谢!

有帮助吗?

解决方案

只有拥有InProc会话才会触发Session_End事件。 SQL或状态服务器会话管理不会触发此事件。如果可以,请返回InProc会话并使用此活动。

除此之外,你不会得到很好的解决方案。 ASP.NET没有提供查看服务器上当前会话列表的方法(至少,StackOverflow的用户不知道,因为我已经问过这个问题),所以你不能使用一个作业来检查它们何时被销毁。

接下来最好的事情是拥有“最后访问时间”。存储在某个地方供您的用户使用,以检测会话的超时。这样的工作的实现很复杂(例如,如果用户快速登录/退出,您可能会错过注销事件)...

所以这里没有完美的解决方案。

其他提示

请注意“正确方法”但过去我就是这样做的。

有一个“有效”的date - 与数据库中的用户记录关联的时间戳。每次用户访问页面时,都会更新到当前时间。如果某人在15分钟内没有访问该页面,则该用户被记录为“注销”。 event,timestamp设置为NULL。

即使您确实让会话事件正常工作,当用户离开您的网站/应用时,您的注销记录也是一个明智的猜测。您可能使用的一种技术是在用户登录时将注销时间放入数据库中,并在使用系统时使用将来的时间更新记录。这是我最近编写的会话表的一般模式:

[Id]  [Uid]    [LoginInOn]        [ExpiresOn]  
 1    johndoe  10/14/2008 10:47   10/14/2008 11:07  

在此表中,我只是在用户与应用程序交互时不断更新ExpiresOn列(当前时间+20分钟)。如果他们尝试在ExpiresOn之后进行交互,那么我知道他们闲置了20分钟并强行重新登录。出于报告目的,我知道如果当前时间大于ExpiresOn,则用户已注销。你可以比这更复杂。例如,我将数据从上面列出的会话表中移出到具有常规流程的报表。这只是为了保持会话表的小,因为很多东西都与它交互。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top