为什么会话返回null?

时间:2012-05-27 14:05:12

标签: c# asp.net session

我无法写入会话变量。

这是我的源代码:

   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;
        }


    }

当我想打电话时(MasterPage.aspx):

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

结果: CurrentUser.Id 1 且CurrentUser.UserName NULL

为什么CurrentUser.UserName为NULL? 如何修改此公共字符串UserName以进行编写?

3 个答案:

答案 0 :(得分:0)

从你分享的代码中,我们无法真正帮助你,因为我们只能猜测发生了什么。

我假设您的CurrentUser类具有Id属性,其代码与Username类似。 Id属性按预期工作,但不是用户名...这听起来确实很可能。

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

然后,它也有助于理解从哪里调用SQLGetData类。身份验证如何运作?

答案 1 :(得分:0)

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

最佳方法,使用debug运行vs ide环境代码 - >例外菜单,在所有异常处理程序上运行并运行应用程序的几个场景,最终你会发现隐藏的错误从简单的错误开始,比如convertToInt或类似的引用错误,这会导致会话变为空...但是我认为事情没有在“错误”页面中出错,但通过上面的“DEBUG”找到了所有异常ON选项。

希望它有所帮助! HydTechie

答案 2 :(得分:-1)

您应首先使用

将“UserName”引入会话
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;            
    }         
  }     
}

完成后,它应该像你写的那样工作。