【发布时间】:2013-05-31 01:55:11
【问题描述】:
最近,在为工作中的 ASP.NET 项目编写一些代码时。我们需要一个跟踪工具来获取用户活动的基本指标(页面点击计数等),我们将在Session 中跟踪它们,然后通过Global.asax 中的Session_End 将数据保存到数据库。
我开始破解,初始代码运行良好,在每个页面加载时更新数据库。不过,我想删除每个请求中的这个数据库命中,只依靠Session_End 来存储所有数据。
所有跟踪代码都封装在Tracker 类中,包括本质上包装会话变量的属性。
问题是,当我在Session_End 方法中执行Tracker.Log() 时,Tracker 代码中的HttpContext.Current.Session 以NullReferenceException 失败。现在,这是有道理的,因为 HttpContext 总是与 当前 请求相关,当然在 Session_End 中,没有请求。
我知道Global.asax 有一个Session 属性,它返回一个HttpSessionState,实际上似乎工作正常(我最终将它注入到跟踪器中)..
但我很好奇,我怎么能从Global.asax的外部获得Global.asax使用的HttpSessionState对象的相同引用?
在此先感谢各位,感谢您的意见。 :)
【问题讨论】:
-
另一个注意事项是 Session_End 也不能保证被调用。 SQL 会话和状态外会话设置就是这种情况。
-
哪位好心人可以为这个问题的答案放一个代码sn-p让初学者理解。如何在“in Proc”模式下访问存储在应用程序中 current.session somnwhere 中的值,然后在 global.asax 文件中访问它。我可以简单地在
session_end中使用this.session还是需要一些额外的代码? -
另外,如果有多个用户登录到该站点。那么
this会单独引用每个请求对吗?
标签: asp.net session session-state global-asax