登录后正确初始化会话

本文关键字:初始化 会话 登录 | 更新日期: 2023-09-27 17:51:12

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

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

Business.User user      = new Business.User();
user.SetLabelCompanyId();
user.SetLabelUsername();
_labelUsername.Text     = user.GetLabelUsername();
_labelCompanyId.Text    = MySession.Current.CompanyId; 

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

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

然后在这些行之前的某个地方初始化MySession。我该怎么做呢?当我使用上述2行(没有其他提到MySession)时,我得到一个错误,会话为空并重定向到登录页面。

登录后正确初始化会话

会话将在用户第一次打开站点时初始化。但是此时,您的会话变量还没有初始化。你需要这样的东西

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

登录成功后,可以将该值存储到session变量中。

我非常建议使用一个分离的类来访问HttpContext,而不是直接在你的业务类中。