我想有一些静态变量,但每个用户会话都是隔离的,所以asp.net中的静态变量对所有用户都是通用的吗?
如果是,是否可以轻松模拟我想要的内容而无需明确使用用户会话?我不能使用Viewstate,因为我正在使用MVC(或者我错了?)。
答案 0 :(得分:5)
static
变量对于所有会话都是通用的。
如果您想保留每用户会话数据,您有三个选择:
Session
处理。会话(通过Session["someKey"]
到达)由ASP.NET在用户的浏览器中设置cookie来实现,该cookie唯一地标识该会话。然后,该id用于查找服务器内存中保存的正确会话数据集。使用Session
的最大好处是数据不可见,也无法为用户操作。最大的缺点是,当应用程序池回收时,一切都会丢失。
设置cookie对服务器来说更轻,但数据是可见的并且可以由用户操纵。如果数据是敏感的,则必须对其进行加密。 Cookie更容易保存更长时间。
将数据作为隐藏表单字段传递实际上只是一种模仿ViewState的方法。它很好,例如一个更新表单,用于传递正在更新的记录的ID,但不是很多。
答案 1 :(得分:1)
任何静态在ASP.NET中都很常见,没有本地化到会话。
我会留给其他人想出一种模拟会话状态而不使用会话状态的方法。