在什么情况下HttpContext.Current.Session可以为null?

时间:2012-10-31 15:24:20

标签: asp.net .net session httpcontext

在什么情况下HttpContext.Current.Session可以为null?

我有一些asp.net页面。

我只是想知道为什么我应该一直检查Session对象是否为null?

e.g。

public static object GetSession(string key)
{

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

return HttpContext.Current.Session[key];

}

return null;

}

3 个答案:

答案 0 :(得分:4)

查看此页面:What should I do if the current ASP.NET session is null?。它对可能性有了很好的解释。

修改

如果会话对象可用 您希望从中访问某个值,那么您很少会遇到这种情况。在大多数情况下,包括其他答案提到的那些, HttpContext.Current.Session [key] 将为null,但不是 HttpContext.Current.Session 本身。

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

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

答案 1 :(得分:2)

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

检查它的目的是防止您的页面在会话为空时抛出丑陋的NullReferenceException。例如,如果您检查它是否为空,则可以续订页面的会话,或重定向到登录页面。

答案 2 :(得分:0)

如果在web.config中关闭sessionState,它可能为null

 <configuration>
  <system.web>
    <sessionState mode="Off" />
  </system.web>
</configuration>