我设置了一堆静态变量
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";
}
}
麻烦的是,当两个用户同时使用该页面时,第一个用户的详细信息会被第二个用户的详细信息覆盖,因为它们已被替换。
为什么会出现这种情况的任何想法。
答案 0 :(得分:6)
当两个用户同时使用该页面时,第一个用户的详细信息会被第二个用户的详细信息覆盖,因为它们已被替换。 任何想法可能会发生这种情况。
是的,因为它们是static
。
当您不希望在所有请求之间共享静态变量时,不要在ASP.NET中使用静态变量(因为每个请求都是不同的线程)。
您可以使用Session
代替。
答案 1 :(得分:2)
这是singleton pattern的情况,您必须使用会话变量/ cookies /其他缓存模式使其对每个用户都是唯一的
答案 2 :(得分:1)
strUserName
是静态的。这意味着所有strUserName
globalvars
通过声明static
某些内容,您可以调用类似SomeClass.SomeStaticVarName
的内容 - 不必创建SomeClass
的实例来访问SomeStaticVarName
当我在学校时,我一直在努力学习静态概念,如果你想要一个更好的例子,请告诉我。