【问题标题】:Session state is not available in this context in Global.asax会话状态在 Global.asax 中的此上下文中不可用
【发布时间】:2016-02-16 07:00:45
【问题描述】:

当我尝试在 Global.aspx 中获取 Session 值时收到错误消息:

我尝试了另一种方法来获取会话值,结果相同但消息不同:

Application_Error 方法出现此错误,Session 不为空,但显示为空。我已将此会话代码置于 (HttpContext.Current.Session != null) 条件下,因此它工作正常,但我想要此方法无法获得的会话值。

请帮助我。 谢谢

【问题讨论】:

    标签: c# asp.net session global-asax application-error


    【解决方案1】:

    Global.asax 文件通常用于跟踪应用程序级别的事件,并且这些事件可以在不同的登录用户之间共享,因此可能无法在 global.asax 事件中获取会话值。

    对于错误记录,您可以使用 httpModule

    以下链接使用 httpModule 进行错误记录

    http://www.codeproject.com/Articles/16171/An-HTTP-Module-for-ASP-NET-Error-Handling

    以下链接用于在 httpModule 中获取会话值

    Can I access session state from an HTTPModule?

    【讨论】:

      【解决方案2】:

      application_error 捕获应用程序中的所有异常。您的错误可能源于没有会话的地方。

      (快速示例:来自异步操作或自定义创建的线程) 最佳测试:在尝试任何会话之前测试 HttpContext.current != null 和 HttpContext.current.session != null 。

      而且无论如何使用会话是不好的

      最后一点:如果你在应用程序错误中设置了一个断点而不是“catch”,那么你的错误 thred/async 可能会在 Visual Studio 停止进程之前完成操作。所以在这种情况下你可以有一个会话,而在正常运行(没有断点)你会得到一个异常

      【讨论】:

        【解决方案3】:

        试试这个...

        string value = HttpContext.Current.Session["user"] as string;
        
        if (String.IsNullOrEmpty(value))
        {
            //your Code here
        }
        

        【讨论】:

          猜你喜欢
          • 2012-10-30
          • 2011-10-19
          • 2015-04-27
          • 1970-01-01
          • 1970-01-01
          • 2014-02-01
          • 2013-10-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多