最近,在工作中为ASP.NET项目编写代码时,我们需要一个跟踪工具来记录用户活动的基本指标(页面点击次数等),我们将它们存储在Session
中,然后通过Global.asax
中的Session_End
将数据保存到数据库中。
我开始着手编写代码,最初的代码可以正常工作,在每个页面加载时更新数据库。但是,我想避免在每个请求上打开数据库连接,并且只依赖于Session_End
来存储所有数据。
所有跟踪代码都封装在Tracker
类中,包括实质上包装Session变量的属性。
问题是,当我在Session_End
方法中执行Tracker.Log()
时,Tracker代码中的HttpContext.Current.Session
失败并出现了NullReferenceException
。现在,这很有道理,因为HttpContext
总是与当前请求相关联,当然在Session_End
中没有请求。
Global.asax
有一个Session
属性,它返回一个HttpSessionState
,似乎工作得很好(最终我将其注入到了跟踪器中)。但我很好奇,我怎么能从
Global.asax
之外获取与Global.asax
使用的HttpSessionState
对象相同的引用呢?提前感谢各位,我很感激你们的回答。 :)
session_end
中简单地使用this.session
,还是需要一些额外的代码? - Unbreakablethis
将分别指向每个请求,对吗? - Unbreakable