我使用了一个静态变量,我的静态变量默认值为1
。然后这个变量值基于用户登录而变化。我的静态变量值用于根据用户登录更改主题。
public static int theme = 1;
我已经检查了5个用户登录,但同时工作正常,但我想知道数百万用户在我的网站中同时登录该静态变量是否失败?
请给我建议
的问候, jatin
答案 0 :(得分:5)
您提到static
变量,并提及多个用户。这是一个警钟,因为static
变量的整个点是一个值(警告,见下文)。如果所有用户总是具有完全相同的theme
(即它是全局配置设置),它将正常工作;但是:它应该是一个每用户设置,它应该是您的用户模型的属性,或其他一些用户存储(cookie,会话状态等)。
这里的警告是[ThreadStatic]
;但真的并没有改变你的场景中的任何东西,特别是如果这是asp.net(因为线程不是用户或请求的同义词)。
答案 1 :(得分:2)
如果这是一个听起来像的asp.net网站,那么你不应该使用static
变量。
您不应该使用静态的原因是因为它不是用户唯一的,它对于连接到您网站的所有用户来说都是相同的变量(我相信它实际上是应用程序池唯一的)。这意味着当一个用户更改它时,它也将为所有其他用户更改。
改为使用会话变量:
// Set.
Session["Theme"] = 1;
// Get.
int theme = (int)Session["Theme"];
为方便起见,您可以将其包装在静态属性中......
public static int Theme
{
get
{
if(Session["Theme"] == null)
return 0;// Or an alternate default value.
return (int)Session["Theme"];
}
set { Session["Theme"] = value; }
}