ASP.NET-记录审核跟踪的用户会话开始/结束时间-Global.ASAX?
我的ASP.NET intranet web应用程序使用Windows身份验证,我想记录以下详细信息: 1) Windows IDASP.NET-记录审核跟踪的用户会话开始/结束时间-Global.ASAX?,asp.net,global-asax,audit,Asp.net,Global Asax,Audit,我的ASP.NET intranet web应用程序使用Windows身份验证,我想记录以下详细信息: 1) Windows ID 2) 会话开始时间 3) 会话停止时间 4) 正在浏览到的URL(可选) 我已经在Global.ASAX的“Session_Start”方法中设置了一些基本的代码来记录会话开始时间(见下文),但到目前为止仅此而已。我觉得这是一种原始的方法,有“更好”的方法。所以我有两个问题: 1) 这样做对吗?如果没有,还有什么其他选择? 2) 如果这是正确的方法,我是否只需要在“
2) 会话开始时间
3) 会话停止时间
4) 正在浏览到的URL(可选)
我已经在Global.ASAX的“Session_Start”方法中设置了一些基本的代码来记录会话开始时间(见下文),但到目前为止仅此而已。我觉得这是一种原始的方法,有“更好”的方法。所以我有两个问题: 1) 这样做对吗?如果没有,还有什么其他选择?
2) 如果这是正确的方法,我是否只需要在“Session_End”方法中添加一些代码来记录它们退出的时间,这就是一个完整的解决方案?当他们关闭浏览器选项卡并打开站点时,是否总是调用此方法,还是必须关闭整个浏览器(我没有注销功能)?用户是否可以跳过此会话结束方法(或在这种情况下跳过启动)
Dim connsql作为新的System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionString(“MyConnectionstring”).ConnectionString)
Dim cmdsql作为System.Data.SqlClient.SqlCommand=connsql.CreateCommand
cmdsql.CommandText=“BeginUserSession”
cmdsql.CommandType=Data.CommandType.StoredProcess
尝试
cmdsql.Parameters.Add(“@windowsid”,System.Data.SqlDbType.VarChar,30,“windowsid”)
cmdsql.Parameters(“@windowsid”).Value=Session(“UserInfo”).identity.name
如果是connsql.State System.Data.ConnectionState.Open,则是connsql.Open()
cmdsql.ExecuteNonQuery()
connsql.Close()
特例
最后
如果connsql.State Data.ConnectionState.Closed,则connsql.Close()
结束尝试
'存储的过程记录开始时间
我不确定您是否能准确地捕捉到会话的结尾,因为
还有。。。如果用户并非都在内部网络上,您将无法控制他们是否拥有“Windows ID”。您的方法可以说很简单,但这完全可以——这取决于要求是什么。如果您需要记录一整套应用程序错误和警告,请考虑实现类似Log4Net的功能。否则我不会说你做的有什么不对
如果在超时值中指定的时间内没有用户活动,或者在代码中显式调用Session.about()时,会话将结束。由于HTTP的无状态性质,无法判断用户是否已离开您的站点、关闭浏览器或停止与其会话的交互。会话结束不可靠 我建议您在会话开始时创建一个记录,记录会话创建的时间,在会话结束时,使用会话结束的时间更新该记录 要处理大多数被动放弃的会话,请使用应用程序_BeginRequest更新记录,以记录用户“最后一次出现”的时间 然后,您需要确定一种标记被动放弃的会话的方法。这将是特定于站点/应用程序的。这可能很简单,只需选择在会话被视为放弃之前必须经过的分钟数,比如10分钟 因此,您有一个查询:
SELECT Username,
SessionStart,
SessionEnd,
LastSeenOn,
DATEDIFF(mi, SessionStart, ISNULL(SessionEnd, LastSeenOn)) DurationMinutes
FROM SessionAudit
WHERE SessionEnd IS NOT NULL
OR DATEDIFF(mi, LastSeenOn, getdate()) > 10
这将带回您的会话审核日志
SELECT Username,
SessionStart,
SessionEnd,
LastSeenOn,
DATEDIFF(mi, SessionStart, ISNULL(SessionEnd, LastSeenOn)) DurationMinutes
FROM SessionAudit
WHERE SessionEnd IS NOT NULL
OR DATEDIFF(mi, LastSeenOn, getdate()) > 10