2012-12-18 155 views
0

我給自己定了一堆靜態變量全局變量覆寫C#

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"; 
     } 

} 

麻煩的是,當兩個用戶使用的頁面在同時第一個用戶的細節被第二個用戶的細節覆蓋,因爲它們被替換。

任何想法,爲什麼這可能發生。

回答

1

strUserName是靜態的。意義僅僅存在一個strUserName所有globalvars

通過聲明的東西static你可以調用像SomeClass.SomeStaticVarName - 沒有SomeClass實例必須創建去SomeStaticVarName

當我在學校裏,我的理念奮鬥的靜態,讓我知道你是否想要一個更好的例子。

6

當兩個用戶同時使用該頁面時,第一個用戶的細節被第二個用戶的細節覆蓋,因爲它們被替換。 任何想法,爲什麼這可能會發生。

是的,因爲他們是static

不要在ASP.NET中使用靜態變量(我假設)當你不想在所有請求之間共享它們,因爲每個請求都是不同的線程。您可以改用Session

+0

感謝。我試過會話,但並不總是保存所有設備上的變量。 – user956731

2

這是singleton pattern的情況下,你必須使用會話變量/餅乾/其他緩存模式,使其具有唯一爲每個用戶

+0

我贊同使用單例模式。 –