0

对于不清楚的问题标题,我真的很抱歉,但我自己对此有点困惑。

我在 IIS 上运行我的网站,并在顶部显示当前登录的用户的用户名。我的网站托管在本地服务器上,并且各种用户同时访问它。

问题

每次用户打开该站点时,它都会显示最近访问该站点的前一个用户的用户名。

代码

这是我在 global.asax 文件中使用的代码。

       void Session_Start(object sender, EventArgs e)
    {
        // Code that runs when a new session is started        
        // code to get the current user name when running from IIS
        System.Security.Principal.IPrincipal _User;
        _User = System.Web.HttpContext.Current.User;
        System.Security.Principal.IIdentity _Identity;
        _Identity = _User.Identity;
        string _Value;
        _Value = _Identity.Name.Substring(_Identity.Name.IndexOf(@"\") + 1);

 DataTable dtId = CetDatabase.GetEmployeDetails(_Value);
        if (dtId.Rows.Count > 0)
        {
            Session["teamid"] = dtId.Rows[0]["TEAMID"].ToString();
            Session["projectid"] = dtId.Rows[0]["PROJECTID"].ToString();
            Session["memberid"] = dtId.Rows[0]["MEMBERID"].ToString();
            CeteraQMS.Main_Master.projectname = dtId.Rows[0]["PROJECTNAME"].ToString();
            CeteraQMS.Main_Master.username = _Value;
            CeteraQMS.Main_Master.teamname = dtId.Rows[0]["TEAMNAME"].ToString();
            Session["role"] = dtId.Rows[0]["MEMBERROLE"].ToString();
        }
        else
        {
            Response.Redirect("AccessDenied.aspx");
        }
    }

我不确定我哪里出错了。

在此先感谢阿基尔

4

1 回答 1

1

这里:

CeteraQMS.Main_Master.username = _Value;

看起来像在静态对象上设置属性。该Main_Master属性看起来像类上的静态属性CeteraQMS(无论是什么)。如您所知,静态对象在应用程序中的所有用户之间共享。所以不要使用任何静态对象来存储特定于当前用户的状态。如果要存储用户名和其他用户特定属性,最好将它们存储到 Session 中,就像使用、teamid和值一样。projectidmemberidrole

于 2012-07-27T08:16:50.683 回答