asp.net中的静态变量对所有用户都是通用的吗?

时间:2013-12-01 17:59:27

标签: c# asp.net

我想有一些静态变量,但每个用户会话都是隔离的,所以asp.net中的静态变量对所有用户都是通用的吗?

如果是,是否可以轻松模拟我想要的内容而无需明确使用用户会话?我不能使用Viewstate,因为我正在使用MVC(或者我错了?)。

2 个答案:

答案 0 :(得分:5)

static变量对于所有会话都是通用的。

如果您想保留每用户会话数据,您有三个选择:

  • 使用内置Session处理。
  • 设置Cookie。
  • 将数据作为隐藏的表单字段传递给服务器(无论如何都适用于您拥有表单的地方)。

会话(通过Session["someKey"]到达)由ASP.NET在用户的浏览器中设置cookie来实现,该cookie唯一地标识该会话。然后,该id用于查找服务器内存中保存的正确会话数据集。使用Session的最大好处是数据不可见,也无法为用户操作。最大的缺点是,当应用程序池回收时,一切都会丢失。

设置cookie对服务器来说更轻,但数据是可见的并且可以由用户操纵。如果数据是敏感的,则必须对其进行加密。 Cookie更容易保存更长时间。

将数据作为隐藏表单字段传递实际上只是一种模仿ViewState的方法。它很好,例如一个更新表单,用于传递正在更新的记录的ID,但不是很多。

答案 1 :(得分:1)

任何静态在ASP.NET中都很常见,没有本地化到会话。

我会留给其他人想出一种模拟会话状态而不使用会话状态的方法。