【问题标题】:Checking if session is null causes exception检查会话是否为空会导致异常
【发布时间】:2016-03-30 20:19:22
【问题描述】:

我有以下代码行:

HttpContext.Current.Session[Constants.SESSION_USER] = user;

这是导致异常的原因,我认为是因为会话为空。

如果我删除此行,则不会引发异常。

我能够从 user 对象中检索 ID,因此我认为这不是导致问题的原因。

从这个问题:

How to know if a session has been set

我尝试了以下方法:

if (HttpContext.Current.Session[Constants.SESSION_USER] == null)
    throw new Exception("SESSIONULL");
else
    throw new Exception("SESSIONOTNULL");

但是这些异常都没有被抛出——我假设是因为它试图访问一个空对象,所以在它执行我的代码之前就抛出了。

如果是这样,我如何判断会话是否为空,我知道我可以使用 try catch 块,因为这会停止错误,但我希望以更精确的方式解决这个问题。

有什么想法吗?

编辑:这不是上面问题的重复,因为上面的问题试图从会话中访问一个变量,我需要检查实际会话是否为空。请在下面查看我的答案。

【问题讨论】:

  • @QuentinRoger 你能看到我对你重复评论的回复吗,如果你同意请删除重复的标签
  • @Alex 我认为这个问题已经有了答案here
  • @ardila 你能解释一下是怎么回事吗?我的问题的答案与要检查空值的变量的级别有关,如果我将答案应用于您链接到的问题,使用原始问题中的变量,我会一直收到空异常。我说的是对的,还是我遗漏了什么?
  • @Alex 知道应该针对 null 检查哪个对象并不是一个好问题,因为每个程序都不存在规范的答案。因此,知道如何检查 null 的规范答案。顺便说一句,您的标题应该是“检查会话是否为空”。 What should I do if the current ASP.NET session is null? 也很有趣,其中包括如何检查空 Session 对象。

标签: c# asp.net session


【解决方案1】:

问题是我试图从空会话访问变量,因此它永远无法检查变量,因为会话为空。

解决方法如下:

            if (HttpContext.Current.Session != null)
            {
                HttpContext.Current.Session[Constants.SESSION_USER] = user;
            }

现在检查实际会话,而不是变量。

【讨论】:

    【解决方案2】:

    试试这个:

    if(!string.IsNullOrEmpty(HttpContext.Current.Session[Constants.SESSION_USER]))
    {
    //for session is available
    }
    

    【讨论】:

    • 如果Session == null,这也会抛出
    猜你喜欢
    • 2011-12-03
    • 1970-01-01
    • 2011-11-02
    • 2012-06-15
    • 1970-01-01
    • 2020-11-08
    • 2010-12-03
    • 2018-04-24
    • 1970-01-01
    相关资源
    最近更新 更多