为什么你会在Session存储对象上使用asp.net的ViewState存储对象?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (92)

除了因为会话存储是多个页面的会话全局,为什么你会想要使用视图状态来保存值呢?

从客户机到服务器之间来回发送除查询字符串之外的任何类型的信息似乎有点荒谬。我的意思是浪费带宽(!),仅仅是为了存储目的。这个会话虽然是跨多个页面的全局,但它似乎是视图状态的一个完全优越的替代方案。

特别是使用asp.net ajax控件和变体时,viewstate可能很快变得臃肿,跟踪所有这些不同控件和html元素的各种状态和变量。

但为什么有页面变量和对象的视图状态存储?

也许我错过了页面viewstate存储的另一个很好的用法,有没有人知道那里的东西?

提问于
用户回答回答于

会话用完,Viewstate不会 - 可以在一小时后回来,视图状态仍然可用。当在网站上前后移动时,Viewstate也始终可用,会话更改。

用户回答回答于

Viewstate或Session的全部原因是将网络从无状态系统转变为动态的定制体验。当用户请求一个页面时,可以恢复用户离开体验的唯一方式是记住服务器或用户客户端上的状态。

Viewstate是一种用于记住用户在客户端上的状态的机制。会话是一种记住用户在服务器上的状态的机制。

Viewstate是一个瞬态存储机制。使用viewstate的控件将其状态呈现为HTML页面,作为隐藏输入。为了防止篡改,它被签名。然而,它没有加密,所以你可能想避免把任何敏感的东西放在那里。Viewstate适用于想要发布多个请求(页面加载)系列的情况。这种情况的一个例子是,当表单没有被验证,因为用户可能输入了错误的电子邮件地址或者某个东西,并且您想要恢复表单,就像在用户提交之前那样。缺点是视图状态可以轻松地将页面大小增加30-50%。

另一方面,会话存储在服务器上。客户端得到一个令牌,告诉服务器哪些内存是他们的。这可能比viewstate更安全,因为数据不会一遍又一遍地重传给用户。虽然有折衷。服务器可能会耗尽内存。或者,如果用户的会话中断,用户可能会丢失数据。

一般来说,没有“正确的”答案可供使用。这完全取决于你想要完成的事情。

大部分与控件有关的事情都应该使用Viewstate。如果正在处理敏感信息,请考虑Session。如果有针对特定页面的数据,请使用viewstate。如果这是在用户访问网站时需要的数据,请参阅Session。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励