会话状态在此上下文中不可用

Tom*_*mas 24 asp.net session

我想在应用程序错误事件中读取会话ID,但始终会收到错误"此上下文中的会话状态不可用".为什么?奇怪的是,我在另一个asp.net应用程序中有相同的代码,一切正常.

void Application_Error(object sender, EventArgs e)
{

        var sessionId = Session.SessionID;
        //skipped code

}
Run Code Online (Sandbox Code Playgroud)

Woo*_*ody 34

会话对象可能不可用,这取决于发生错误的时间.

例如,如果Begin_Request上发生错误,则会话将无法使用,因为尚未创建会话.

总而言之,有时它会工作,有时根本不会发生错误.

最好在访问会话ID之前检查会话对象的状态,例如

HttpContext context = HttpContext.Current;

if (context != null && context.Session != null) ...
Run Code Online (Sandbox Code Playgroud)

  • 此外,HttpContext.Current可能为null,因此*if*子句应为:if(context!= null && context.Session!= null) (2认同)
  • 值得注意的是,检查`Context`然后`Context.Session`为null可以避免异常.直接从应用程序对象访问`Session`会引发异常(如果不可用),而不是产生`null`.请参见http://stackoverflow.com/a/6021261/1178314 (2认同)