我想在使用它之前检查基页类中是否存在Session,但我发现如果它不存在,它只会通过检查抛出异常:
if (Session != null)
{
Session.Remove("foo");
}
将抛出此异常:
会话状态只能在enableSessionState设置为true时使用,或者在a中 配置文件或在Page指令中。还请确保 System.Web.SessionStateModule或自定义会话状态模块包含在 应用程序配置中的\\部分。
检查发生在我的所有aspx页面派生自的基页类的Load事件中。该应用程序启用了会话,并且它具有httpModules节点中列出的模块。这是一个经常使用会话的应用程序,通常没有问题。
我仅在某些页面上出现此错误,而且大部分时间都不可靠。我知道我应该做一些不同的事情以防止错误,但我不确定是什么?
我可能在生命周期中过早地召集会议吗? 我没有正确检查会话是否可用吗?
答案 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 我没有它们可用)