0

我设置了一堆静态变量

public class globalvars
{
      /// <summary>
      /// Is user logged in
      /// </summary>
      public static string strUserName
      {
          get;
          set;
      }
}

然后在我的整个项目中使用它们

public class logintowebsite : CustomerMappings
{


  public static void QuickLoginCheck()
   {
       try
       {
           LoginDetails user = ActiveSubsite.Instance.SubsiteSettings.CurrentUser;
           globalvars.strUserName = "Bert";

       }
       catch
       {
           globalvars.strUserName = "Ernie";
       }

}

麻烦的是,当两个用户同时使用该页面时,第一个用户的详细信息会被第二个用户覆盖,因为它们被替换为 .

为什么会发生这种情况的任何想法。

4

3 回答 3

6

当两个用户同时使用该页面时,第一个用户的详细信息会被第二个用户覆盖,因为它们被替换为 . 为什么会发生这种情况的任何想法。

是的,因为它们是static.

当您不想在所有请求之间共享静态变量时,不要在 ASP.NET(我假设)中使用它们,因为每个请求都是不同的线程。

你可以Session改用。

于 2012-12-18T15:04:27.353 回答
2

这是单例模式的情况,您必须使用会话变量/cookies/其他缓存模式以使其对每个用户都是唯一的

于 2012-12-18T15:06:12.033 回答
1

strUserName是静态的。意味着只有一个strUserName适合所有人 globalvars

通过声明一些东西static,你可以调用类似的东西SomeClass.SomeStaticVarName- 不必创建实例SomeClass即可到达SomeStaticVarName

当我在学校时,我对静态的概念感到困惑,如果你想要一个更好的例子,请告诉我。

于 2012-12-18T15:04:20.307 回答