我正在我期望用户登录的页面上使用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
)时,我得到一个错误,即会话为空并重定向到登录页面。
答案 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中。