2009-07-14 53 views
8

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

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

将抛出此异常:当enableSessionState设置为true只能用

会话状态,无论是在 配置文件或Page指令。另请确保 System.Web.SessionStateModule或自定义会话状态模块包含在应用程序配置中的 \\部分中。

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

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

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

回答

3

你可以让你的支票更安全 - Page.Session包装空检查一下Context.Session属性。所以你应该能够检索Context.Session并检查它是否为空。如果是,则会话状态不可用。

但应提供的Page_Load(),使指向其他地方的问题:)

0

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

0

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

还要检查在标签<pages /> web.config文件,并对其进行更新,包括 -

<pages enableSessionState="true" /> 

参考:Here

+0

enableSessionState应该是页面类的属性?我只看到enableViewState作为一个属性。 – 2009-07-14 13:36:11

0

尝试检查HttpContext.Current.Session,甚至HttpContext.Current(我做了很多的单元测试,当这些部件被称为从在ASP.NET我得到了那些增值经销商,但是当我把他们从NUNIT我没有让他们提供)

9

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

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

如果你不确定你是否在web上下文中运行,你需要检查HttpContext。事先不是空的。

+0

`IReadOnlySessionState`继承`IRequiresSessionState`,所以你只需要检查`HttpContext.Current.Handler是IRequiresSessionState`。 – 2013-11-13 15:56:32