静态变量是否会为每个客户端提供不同的值?

时间:2015-06-25 10:32:34

标签: c#

我创建了一个Windows应用程序(C#),其中一些信息作为静态变量存储在登录表单中 - 例如用户名和用户角色存储在静态变量中。

此应用程序将在LAN服务器上运行,可由瘦客户端访问,同时多个用户将使用此应用程序。

我需要确认在这种情况下,静态变量是否像会话变量一样,就像在web基础系统中一样?或者这些静态变量混合在一起?

例如,用户A和用户B已登录。如果用户A信息同时访问同一应用程序但来自不同系统,则用户A信息是否可以与用户B信息混合?

2 个答案:

答案 0 :(得分:3)

静态字段与AppDomain相关联。根据MSDN文档,AppDomain是:

  

[...]应用程序执行的隔离环境。

  • 如果进程显式有多个与之关联的AppDomain,则静态字段将具有多个值。每个AppDomain都有自己的静态字段值。
  • 如果进程只有一个AppDomain,那么静态字段实际上是全局变量,在任何给定时间都有一个值。

无论如何,我认为你根本不应该混淆AppDomains。实际上,您应该完全避免这种情况的静态字段。

而是使用自定义Session对象,该对象将为各个用户存储个人信息。当用户启动会话时创建Session实例,并在会话结束时处置/释放它。确保您不要混合属于不同用户的两个会话实例,并且您可以继续使用。

答案 1 :(得分:0)

只有1个静态变量。

如果您有一个表示客户端连接的对象;并且它是该类的静态字段,它应该被制作成一个实例字段,玩具需要每个客户端都有自己的版本;否则他们都会分享它。