0

我在希望用户登录的页面上使用 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。我怎样才能做到这一点?当我使用上面的 2 行(没有其他提及MySession)时,我收到一个错误,即会话为空并重定向到登录页面。

4

1 回答 1

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 而不是直接在您的业务类中。

于 2013-01-10T19:08:26.810 回答