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

时间:2011-08-04 11:16:44

标签: asp.net session

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

void Application_Error(object sender, EventArgs e)
{

        var sessionId = Session.SessionID;
        //skipped code

}

4 个答案:

答案 0 :(得分:32)

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

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

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

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

HttpContext context = HttpContext.Current;

if (context != null && context.Session != null) ...

答案 1 :(得分:2)

检查c#中是否缺少任何映射到设计部分中的控件或问题的事件

答案 2 :(得分:1)

Application_error可以在会话不存在的情况下触发,例如垃圾收集器清理时。错误的来源可能不是用户线程。

首先检查会话是否为空。

西蒙

答案 3 :(得分:1)

如果对ASP.NET状态服务器使用进程外状态模式,则可能会收到此错误。您需要使用[Serializable]属性标记要保存为会话状态的所有类