Session_Start中设置的会话值在Page_PreInit中不可用

时间:2011-09-12 22:11:50

标签: asp.net

我遇到了ASP.NET 4.0 Web窗体应用程序的间歇性问题。

在Session_Start中,我将主页文件路径存储在会话中:

protected void Session_Start(Object sender, EventArgs e)
{
   // Not shown: get master page path from database

   Session["MasterPagePath"] = PathIGotFromTheDatabase;
}

然后在我的页面'Page_PreInit中,我使用该会话值来设置Page.MasterPageFile

protected void Page_PreInit(object sender, EventArgs e)
{
    Page.MasterPageFile = Session["MasterPagePath"] + @"/MyMasterPage.Master";
}

99%的情况下这种情况有效,但偶尔会出现问题,Session [“MasterPagePath”]为空。用户报告他们必须关闭所有活动的浏览器会话才能再次使用该站点。

我的理解是,由于我在Session_Start中填充了Session [“MasterPagePath”],因此它应始终在我的页面的PreInit方法中可用。如果我的会话已经过期,那么在调用Page_PreInit之前,Session_Start将始终重新填充。

我在这里遗漏了什么吗?在什么条件下我能描述的是什么?我正在使用InProc会话状态来获取它的价值。

1 个答案:

答案 0 :(得分:0)

我不认为在Application_Start上添加的Session对象在控制级别是可用的。应用程序[“myObj”]可供所有用户使用。

有关生命周期的更多信息here