【问题标题】:Static variables in web requestsWeb 请求中的静态变量
【发布时间】:2014-05-28 09:06:37
【问题描述】:

静态公共类中的静态公共变量在 C# MVC3 Web 项目中的 Web 请求之间的行为方式。这些类型的变量是否在请求之间保持值?

【问题讨论】:

  • 是的,值将在请求之间和用户之间保留,但使用它们不是一个好主意(实际上取决于),我们在我的项目中面临很多问题。

标签: c# asp.net-mvc-3 static-members


【解决方案1】:

以最简单的形式回答您的问题;是的。任何静态的东西都会持续存在:

  • 请求之间
  • 所有用户

它们不会在同一应用程序的不同实例之间共享(例如,在负载平衡的情况下),并且当应用程序池回收时它们失去它们的值。

一般来说,尝试使用静态变量保持状态是一个坏主意,除非您有非常具体的理由这样做。

如果您正在考虑使用静态变量在请求之间保存用户特定的数据,不要。因为它们是跨线程共享的(因此跨请求和用户),所以一旦您拥有多个用户,就会引入竞争条件。

选择另一种存储形式,例如会话状态、cookie 或 - 更好的是 - 数据库。

【讨论】:

  • 好答案。当涉及到用户敏感数据时,使用static 变量是最糟糕的主意。
  • 我只想处理 Web 应用程序的全局值(所有用户的值相同)并且不经常更改。是否有另一种方法不需要每次我们想要读取值时都访问数据库?
  • @miguelbgouveia:在这种情况下,很有可能使用它,但请确保引用其他可能包含敏感数据的类。
  • @miguelbgouveia 如果您正在提供全局数据并且只想避免无关的数据库调用,请考虑将信息存储在数据库或文件系统中并使用单例:msdn.microsoft.com/en-gb/library/ff650316.aspx
猜你喜欢
  • 1970-01-01
  • 2010-09-08
  • 2010-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多