登录后正确初始化会话

时间:2013-01-10 18:25:25

标签: c# asp.net session

我正在我期望用户登录的页面上使用C#代码。此时,假设数据库可以验证登录信息,我在整个会话期间设置了我想要跟踪的会话变量。我没有在任何地方初始化会话,但是通过设置会话变量,无论如何都会发生这种情况。我的代码没有任何错误,但我不确定我是否正确这样做。

成功登录后直接在页面上进行代码隐藏:

Business.User user      = new Business.User();

user.SetLabelCompanyId();
user.SetLabelUsername();

_labelUsername.Text     = user.GetLabelUsername();
_labelCompanyId.Text    = MySession.Current.CompanyId; 

我打电话给_labelUsername.Text的方式是我打算做的,但我打电话给_labelCompanyId的方式是我觉得对不熟悉我的项目的人会感到困惑。它实现了创建会话的目标,但是尽管以相同的方式使用,但调用的方式与用户名不同。我宁愿做的是:

_labelUsername.Text     = user.GetLabelUsername();
_labelCompanyId.Text    = user.GetLabelCompanyId();

然后在这些行初始化MySession之前的某个地方。我怎样才能做到这一点?当我使用上面的两行(没有提到MySession)时,我得到一个错误,即会话为空并重定向到登录页面。

1 个答案:

答案 0 :(得分:0)

当用户第一次打开网站时,会话会被初始化。但此时,您的会话变量未初始化。你需要这样的东西

//inside in your Business.User class (set reference to System.Web)
public string GetLabelCompanyId()
{
  string returnValue = String.Empty;
  HttpContext context = HttpContext.Current;
  if(context != null)
  {
     if(context.Session["CompanyId"] != null)
     {
        returnValue = context.Session["CompanyId"];
     }
  }

  return returnValue;
}

成功登录后,您可以将值存储到会话变量中。

我非常建议使用一个单独的类来访问HttpContext,而不是直接在您的Business Class中。