Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 会话\u开始中设置的会话值在页面\u PreInit中不可用_Asp.net - Fatal编程技术网

Asp.net 会话\u开始中设置的会话值在页面\u PreInit中不可用

Asp.net 会话\u开始中设置的会话值在页面\u PreInit中不可用,asp.net,Asp.net,我在ASP.NET 4.0 Web窗体应用程序中遇到间歇性问题 在会话_Start中,我将母版页文件路径存储在会话中: protected void Session_Start(Object sender, EventArgs e) { // Not shown: get master page path from database Session["MasterPagePath"] = PathIGotFromTheDatabase; } 然后在我的页面的Page_PreIni

我在ASP.NET 4.0 Web窗体应用程序中遇到间歇性问题

在会话_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%的时间内都能正常工作,但偶尔会出现故障,会话[“MasterPagePath”]为空。用户报告他们必须关闭所有活动浏览器会话才能再次使用该站点

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


我是不是遗漏了什么?我所描述的情况在什么情况下会发生?我使用InProc会话状态是为了它的价值。

我认为在应用程序启动时添加的会话对象在控制级别不可用。应用程序[“myObj”]将可供所有用户使用


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

我认为在应用程序启动时添加的会话对象在控制级别不可用。应用程序[“myObj”]将可供所有用户使用


关于生命周期的更多信息。

我还假设ASP.NET在
页面请求
-阶段(在
初始化前
之前)决定是否必须创建新会话。因此,我不认为这是一个“页面生命周期”问题。您使用的是什么框架?你读过这些评论吗:?@Tim有一条有趣的评论说,当两个请求具有相同的会话ID时,Session\u Start会被调用两次。我想这可能是并发或竞争条件问题,但我的理解是,ASP.NET应该在需要时锁定会话。我还假设ASP.NET在
页面请求
-阶段(在
初始化前
之前)决定是否必须创建新会话。因此,我不认为这是一个“页面生命周期”问题。您使用的是什么框架?你读过这些评论吗:?@Tim有一条有趣的评论说,当两个请求具有相同的会话ID时,Session\u Start会被调用两次。我想这可能是并发或竞争条件问题,但我的理解是,ASP.NET应该在需要时锁定会话。