登录后正确初始化会话
本文关键字:初始化 会话 登录 | 更新日期: 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,而不是直接在你的业务类中。