代码之家  ›  专栏  ›  技术社区  ›  Pete Michaud

会话的ASP.NET检查

  •  8
  • Pete Michaud  · 技术社区  · 17 年前

    我想在使用基本页类之前检查它是否存在会话,但我发现如果它不存在,它只会通过检查引发异常:

    if (Session != null)
    {
        Session.Remove("foo");
    }
    

    将引发此异常:

    会话状态只能在将EnableSessionState设置为true时使用,或者在 配置文件或页指令中。请确保 system.web.session state module或自定义会话状态模块包含在 \\应用程序配置中的部分。

    检查发生在所有ASPX页都从中派生的基本页类的加载事件中。应用程序启用了会话,并且在httpmodules节点中列出了模块。这是一个经常使用会话的应用程序,通常没有问题。

    我只在某些页面上得到这个错误,大多数时候它是不可靠的。我知道我应该做些不同的事情来防止出错,但我不确定是什么?

    我是否在生命周期中过早地调用会话? 我是否没有正确检查会话是否可用?

    5 回复  |  直到 12 年前
        1
  •  3
  •   blowdart    17 年前

    您可以使检查更安全-page.session围绕context.session属性包装一个空检查。所以您应该能够检索context.session并检查它是否为空。如果是,则会话状态不可用。

    但是它应该在page_Load()中可用,这样就可以指向其他地方的问题:)

        2
  •  9
  •   Rob Kent andersra    12 年前

    您可以使用这样的方法来确定当前请求是否使用会话:

        public static bool RequestHasSession
        {
            get
            {
                return (HttpContext.Current.Handler is IRequiresSessionState);
            }
        }
    

    如果您不确定是否在Web上下文中运行,则需要事先检查httpContext.current是否不为空。

        3
  •  0
  •   David Hedlund    17 年前

    您没有遇到异常,因为某个会话变量为空,而只是在一个未配置为与会话状态服务器通信的页上使用会话逻辑(在某些情况下,该页实际上是另一台计算机,这是有意义的)。如果这不是您的问题,请考虑确保始终将EnableSessionState设置为true。

        4
  •  0
  •   Andrea    17 年前

    尝试检查 HttpContext.Current.Session ,甚至 HttpContext.Current (在单元测试中,我经常这样做,当从ASP.NET调用组件时,我得到了这些变量,但是当我从 非单位 我没有。)

        5
  •  0
  •   Kirtan    17 年前

    是否检查了引发错误的页面 enableSessionState 页指令的属性?您可以通过转到.aspx页并检查 启用会话状态 属性设置为true/false。如果设置为 false 使它 true .

    同时签入web.config文件中的标记 <pages /> ,并将其更新为包含-

    <pages enableSessionState="true" />
    

    参考文献: Here