为什么会话返回空

本文关键字:返回 会话 为什么 | 更新日期: 2023-09-27 18:35:24

我不能写入会话变量。

这是我的源代码:

   public class CurrentUser
    {
        public static string UserName
        {
            get
            {
                if (HttpContext.Current.Session["UserName"] != null)
                    return (string)HttpContext.Current.Session["UserName"];
                else
                    return null;
            }
            set
            {
                HttpContext.Current.Session["UserName"] = value;
            }
        }
    }

我称这个类为写:

public class SQLGetData
    {
        public UserDC LogIn()
        {
            UserDC userDC = new UserDC();

            CurrentUser.Id = 1;
            CurrentUser.UserName = "Admin"; 
            userDC.id = 1;
            userDC.UserName = "Admin";
            return userDC;
        }

    }

当我想调用(母版页.aspx):

Label1.Text = CurrentUser.Id + CurrentUser.UserName;

结果:CurrentUser.Id 为 1,CurrentUser.UserName 为 NULL。

为什么 CurrentUser.UserName 为 NULL?如何修改此公共字符串用户名写入?

为什么会话返回空

从您共享的代码来看,不可能真正帮助您,因为我们只能尝试猜测正在发生的事情。

我假设您的 CurrentUser 类有一个 Id 属性,其代码与用户名相似。Id 属性按预期工作,但用户名不工作...这听起来真的很奇怪。

你能分享你的类的完整代码吗?或者至少是 Id 属性的代码?

然后,了解从何处调用 SQLGetData 类也会有所帮助。身份验证如何工作?

我对这种会话空场景的智慧是 - 您的应用程序中发生了隐藏的错误,但没有发现。 代码中的任何异常都会终止会话,并可能继续新会话,因此值为 null...

最好的方法是,在所有异常处理程序上运行 vs IDE 中的 vs IDE 中的 Debug --> 异常菜单,并在多个场景中运行应用程序,最终您会意识到从简单的错误(如 convertToInt 或类似的引用错误)开始存在隐藏的错误,这会导致会话变为 null...但是正如我猜测的那样,事情并没有在"错误"页面中出错,而是通过上面的"调试"找到,所有例外都是ON选项。

希望对您有所帮助!海德泰奇

您应该首先

使用
HttpContext.Current.Session.Add("UserName", value)

在你的二传手里。

public class CurrentUser     
{          
 public static string UserName         
 {             
    get             
    {                 
      if (HttpContext.Current.Session["UserName"] != null)                     
         return (string)HttpContext.Current.Session["UserName"];
      else                     
         return null;             
    }              
    set             
    {                
      if (HttpContext.Current.Session["UserName"] == null)
         HttpContext.Current.Session.Add("UserName", value);
      else
         HttpContext.Current.Session["UserName"] = value;            
    }         
  }     
}

这样做之后,它应该像你写的那样工作。