如何在用户离开ASP时进行审核.NET应用程序



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

我有一个"SessionHelper"类,用于管理会话设置程序/获取程序。

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

我曾尝试在SessionHelper类中重写"finalize",并在该类被销毁时在那里执行,但它也没有触发该事件。

我会尝试在SessionHelper中实现IDisposable,但我不知道在哪里调用它,所以它总是被调用。

审计用户离开ASP的正确方法是什么。NET应用程序?

谢谢!

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

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

下一个最好的方法是为用户存储一个"最后访问时间",并使用它来检测会话的超时。不过,这样的作业的实现很复杂(例如,如果用户快速登录/注销,您可能会错过注销事件)。。。

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

请注意"正确的方式",但以下是我过去的做法。

在数据库中具有与用户记录相关联的"活动"日期时间戳。每次用户访问页面时,都会更新到当前时间。如果有人在15分钟内没有访问该页面,那么该用户将被记录为"注销"事件,时间戳将设置为NULL。

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

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

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

相关内容

  • 没有找到相关文章

最新更新