【发布时间】:2012-02-26 13:30:24
【问题描述】:
在大约 100 多个用户登录到一个网站的环境中 形成身份验证,调用 HttpContext.Current.User.Identity.Name 返回正确登录的用户。
但是,有 10% 的时间返回了错误的用户全名信息。 我的测试机器上从来没有遇到过这样的问题,它只发生在生产中。我无法在我的测试机器上重新创建与许多用户相同的环境。
这个应用的逻辑:
1) 用户输入用户名并通过,通过 SQL DB 调用查找信息,如果匹配,用户通过身份验证 FormsAuthentication.RedirectFromLoginPage(username, false)
FormsAuthentication.SetAuthCookie(user.SYS_Users_ID.ToString(), false);
if (Request["ReturnURL"] == null)
FormsAuthentication.RedirectFromLoginPage(user.SYS_Users_ID.ToString(), false);
else
Response.Redirect("/" + SysConfig.ApplicationName + appConfig.DefaultPages.DefaultPage);
2)重定向后,我将用户全名放入隐藏字段
if (!IsPostBack)
userFullName.Value = Helper.GetCurrentUserFullName();
...
public static string GetCurrentUserFullName()
{
string _userFullName = string.Empty;
try
{
_userFullName = new AgrotMasofim.DAL.Users.Users().GetUserFullName(GetCurrentUserID());
}
catch (Exception ex)
{
Logs.WriteToFileLog(string.Empty,ex);
}
return _userFullName;
}
public static Decimal GetCurrentUserID()
{
Decimal _userID = 0;
if (HttpContext.Current.User != null)
{
try
{
_userID = Convert.ToDecimal(HttpContext.Current.User.Identity.Name);
}
catch (Exception ex)
{
Logs.WriteToFileLog(string.Empty, ex);
}
}
return _userID;
}
3) 在用户访问的所有页面上,他/她的信息都显示在母版页上的 Label 中
lblUserName.Text = HttpUtility.HtmlDecode("Hello " + userFullName.Value);
这几乎一直有效。任何想法为什么它可能会失败 时不时?
【问题讨论】:
-
请向我们展示您的
GetCurrentUserFullName()方法的代码。 -
错误信息是什么意思?是别人的名字吗?是空白吗?
-
变量userFullName是如何声明的?
-
它显示了别人的名字。
-
userFullName 是页面上的隐藏字段
标签: asp.net forms-authentication httpcontext