HttpContext.Current.Session在哪些情况下可能为空?

6

HttpContext.Current.Session何时会为空?

我有一些asp.net页面。

我想知道为什么我应该始终检查Session对象是否为空?

例如:

public static object GetSession(string key)
{

if (HttpContext.Current.Session != null)
{

return HttpContext.Current.Session[key];

}

return null;

}
3个回答

4

看看这个页面:如果ASP.NET会话为空,我该怎么办?。它对可能出现的情况进行了相当好的解释。

编辑

很少会有一个无法确定Session对象是否可用您想从中访问值的情况。在大多数情况下,包括其他答案提到的情况下,HttpContext.Current.Session[key]将为null,但不会是HttpContext.Current.Session本身。

在大多数日常编码场景中,Session对象不会为null,您的问题中的代码会过度消耗资源。同样,如果您提前知道Session对象为null,则不应尝试访问它。

如果您的应用程序在不寻常的情况下访问Session对象时可能为空,那么您的代码将是处理它的一种好方法,例如上述引用的问题中所描述的情况。


问题是为什么它可以为空,以及我们是否应该检查Session对象是否为空。 - The Light
为您编辑了我的答案。参考问题的已接受答案概述了它可能为空的原因,我还添加了更多关于您是否应该按照您发布的方式进行检查的信息。 - Jake Braun

2
  • 如果IIS重置,您的会话将变为null。
  • 如果会话超时到期,它将变为null。
  • 也可能有其他原因。

检查它的目的是为了防止页面在会话为空的情况下抛出一个丑陋的NullReferenceException。如果您检查它是否为空,您可以更新页面的会话,或者例如重定向到登录页面。


1
这些原因不足以证明我们应该检查Session对象是否为空。 - The Light
当超时时间到期时,为什么变量会变成null?难道不应该在下一次请求中更新它吗? - Protector one

0
如果在web.config中关闭了sessionState,它很可能会是null。
 <configuration>
  <system.web>
    <sessionState mode="Off" />
  </system.web>
</configuration>

1
这将导致应用程序重新启动。我看不到任何有效的理由来检查Session对象是否为空。 - The Light

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接