118

ASP.NET 中的 SessionState 和 ViewState 有什么区别?

4

5 回答 5

145

会话状态包含与服务器的特定会话(由特定客户端/浏览器/机器)有关的信息。这是一种跟踪用户在网站上所做的事情的方法......跨多个页面......在 Web 的无状态状态下。例如,特定用户购物车的内容就是会话数据。Cookies 可用于会话状态。另一方面,
视图状态是特定网页的特定信息。它存储在隐藏字段中,因此对用户不可见。它用于保持用户的错觉,即页面记住了他上次在其上所做的事情 - 不要每次回帖时都给他一个干净的页面。查看此页面了解更多信息

于 2009-04-09T09:32:03.800 回答
96

会话状态保存在服务器上,ViewState 保存在页面中。

会话状态通常在用户一段时间不活动后被清除(在请求 cookie 中没有发生包含会话 ID 的请求)。

视图状态在随后的帖子中发布在隐藏字段中。

于 2009-04-09T09:27:29.693 回答
33

会话状态

  • 可以持久保存在内存中,这使其成为一种快速的解决方案。这意味着不能在 Web Farm/Web Garden 中共享状态。
  • 可以保存在数据库中,对网络农场/网络花园很有用。
  • 会话结束时清除 - 通常在 20 分钟不活动后。

视图状态

  • 在服务器和客户端之间来回发送,占用带宽。
  • 没有有效期。
  • 在网络农场/网络花园中很有用
于 2009-04-09T09:27:02.673 回答
14

用法: 如果您要将要访问的信息存储在不同的网页上,可以使用 SessionState

如果要存储要从同一页面访问的信息,则可以使用 Viewstate

存储 Viewstate 存储在页面本身中(以加密文本形式),而 Sessionstate 存储在服务器中。

SessionState 在以下情况下会清除

  1. 被程序员清除
  2. 由用户清除
  3. 超时
于 2009-04-09T10:13:03.843 回答
5

会话主要用于存储用户特定数据[会话特定数据]。在会话的情况下,您可以使用整个会话的值,直到会话过期或用户放弃会话。Viewstate 是仅在使用它的页面中具有范围的数据类型。除非您将这些值传输到所需的页面,否则您无法让其他页面访问视图状态值。同样在视图状态的情况下,所有服务器端控件数据都作为 __Viewstate 中的键值对传输到服务器,并在回发发生时传输回并呈现给客户端中的适当控件。

于 2009-04-09T09:34:33.123 回答