ASP .NET检查会话

时间:2009-07-14 13:26:45

标签: asp.net session session-state

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

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

将抛出此异常:

  

会话状态只能在enableSessionState设置为true时使用,或者在a中   配置文件或在Page指令中。还请确保   System.Web.SessionStateModule或自定义会话状态模块包含在   应用程序配置中的\\部分。

检查发生在我的所有aspx页面派生自的基页类的Load事件中。该应用程序启用了会话,并且它具有httpModules节点中列出的模块。这是一个经常使用会话的应用程序,通常没有问题。

我仅在某些页面上出现此错误,而且大部分时间都不可靠。我知道我应该做一些不同的事情以防止错误,但我不确定是什么?

我可能在生命周期中过早地召集会议吗? 我没有正确检查会话是否可用吗?

5 个答案:

答案 0 :(得分:10)

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

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

如果您不确定自己是否在Web上下文中运行,则需要事先检查HttpContext.Current是否为null。

答案 1 :(得分:3)

您可以使您的检查更安全 - Page.Session在Context.Session属性周围进行空检查。所以你应该能够检索Context.Session并检查它是否为null。如果是,则会话状态不可用。

但它应该在Page_Load()中可用,因此指向其他地方的问题:)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您是否检查了为Page指令的enableSessionState属性抛出错误的页面?您可以通过转到.aspx页面并检查enableSessionState属性是否设置为true / false来实现。如果设置为false,请将其设为true

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

<pages enableSessionState="true" />

参考:Here

答案 4 :(得分:0)

尝试检查HttpContext.Current.Session,甚至是HttpContext.Current(我在单元测试中做了很多,当从ASP.NET调用组件时我得到了这些变量,但当我从中调用它们时 NUNIT 我没有它们可用)