最近写项目的时候发现了一个问题,解决了好久都没解决。
先说问题。
private System.Web.HttpResponse Response;
private System.Web.HttpRequest Request;
private System.Web.HttpServerUtility Server;
private System.Web.SessionState.HttpSessionState Session; //主要是这个地方
private System.Web.HttpApplicationState Application;
public Member()
{
Response = System.Web.HttpContext.Current.Response;
Request = System.Web.HttpContext.Current.Request;
Server = System.Web.HttpContext.Current.Server;
Application = System.Web.HttpContext.Current.Application;
Session = System.Web.HttpContext.Current.Session;
}
这段代码正常,这是我的Member公共类的全局变量和构造函数。
这段代码怎么就会有问题呢?
红色部分调试时 Session为null。这是什么原因呢?
这个问题我找了好久 最后还是在Session 生命周期中发现了问题。
调用此的页面给你们看看就知道了
<script runat="server"> private Member myApp = null; protected Member sss = new Member(); protected void Page_Load(object sender, EventArgs e) { myApp = new Member(); tools = UtilFactory.CreateTools(); } </script>
红色部分是在Page_Load中实例化的。
而蓝色部分是在页面初始化之前实例化的。
如果按照蓝色部分,进行调试 那么Member里面的Session就为Null值。
如果按照红色部分调试 那么Session为正常获取当前的session
这是因为Session的生命源自Page的Page_Load后才开始的,所以 在page_load外进行实例化就会发生这种问题