【问题标题】:In what situations the HttpContext.Current.Session can be null?在什么情况下 HttpContext.Current.Session 可以为空?
【发布时间】:2012-10-21 02:40:16
【问题描述】:

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

我有一些 asp.net 页面。

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

例如

public static object GetSession(string key)
{

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

return HttpContext.Current.Session[key];

}

return null;

}

【问题讨论】:

    标签: asp.net .net session httpcontext


    【解决方案1】:

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

    编辑

    您很少会遇到不知道 Session 对象是否可用您想从中访问值的情况。在大多数情况下,包括其他答案中提到的情况,HttpContext.Current.Session[key] 将为空,但 HttpContext.Current.Session 本身不会。

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

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

    【讨论】:

    • 问题是为什么它可以为 null 以及我们是否应该检查 Session 对象是否为 null。
    • 为您编辑了我的答案。所引用问题的已接受答案概述了为什么它可能为空的可能性,并且我添加了有关您是否应该按照您发布的方式进行检查的更多信息。
    【解决方案2】:
    • 如果 IIS 重置您的会话将变为空。
    • 如果会话超时到期,它将变为空。
    • 可能还有其他原因。

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

    【讨论】:

    • 这些原因并不能证明我们应该检查 Session 对象是否为空。
    • 为什么超时后会变成null?那么不应该根据以下请求续订吗?
    【解决方案3】:

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

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

    【讨论】:

    • 这将导致应用程序重新启动。我没有看到任何正当理由检查 Session 对象是否为 null。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 2017-11-30
    相关资源
    最近更新 更多