除了因为会话存储对于多个页面是会话全局的,为什么还要使用视图状态来保存值呢?
在客户机和服务器之间来回发送除了几个小查询字符串之外的任何类型的信息似乎都有些荒谬。我的意思是,仅仅为了存储目的,这是多么浪费带宽(!)。虽然会话是跨多个页面的全局会话,但它似乎是比视图状态更好的替代方案。
特别是对于asp.net ajax控件和变体,视图状态可能很快就会变得臃肿起来,跟踪所有这些不同控件和html元素的各种状态和变量。
但是为什么会有页面变量和对象的视图状态存储呢?
也许我错过了页面视图状态存储的另一个很好的用法,有没有人知道些什么?
感谢您的阅读!
编辑:每个人都有一个很好的答案,如果我没有选择你的答案,很抱歉。
发布于 2009-02-22 19:44:14
会话用完,视图状态不会-您可以在一小时后返回,视图状态仍然可用。当您在网站上后退/前进、会话更改时,视图状态也始终可用。
发布于 2009-02-22 23:39:14
视图状态或会话的全部原因是将web从无状态系统转变为动态的、定制的体验。当用户请求页面时,您可以从用户体验中断的地方恢复的唯一方法是记住服务器或用户客户端上的状态。
Viewstate是一种在客户端记住用户状态的机制。会话是一种记住服务器上用户状态的机制。
视图状态是一种瞬时存储机制。使用viewstate的控件将其状态作为隐藏输入呈现到html页中。为了防止篡改,它被签名。但是,它没有加密,所以您可能希望避免在其中放置任何敏感内容。在需要跨多个请求序列(页面加载)进行发布的情况下,视图状态非常有用。例如,当一个表单因为用户输入了错误的电子邮件地址或其他原因而无法验证时,您希望将表单恢复为用户提交之前的状态。这样做的缺点是,视图状态是一个饥饿的野兽,可以很容易地增加30-50%的页面大小。
另一方面,会话存储在服务器上。客户端得到一个令牌,它告诉服务器哪个内存块是他们的。这可能比视图状态更安全,因为数据不会一遍又一遍地重新传输给用户。不过,这是有权衡的。您的服务器可能会内存不足。或者,如果他们的会话中断,用户可能会丢失数据。
一般来说,没有“正确”的答案可以使用。这一切都与你试图实现的目标有关。
对控件执行的大多数操作都应该使用视图状态。但是,如果您正在处理敏感信息,请考虑使用会话。如果您有一组特定页面的数据,请使用viewstate。如果在用户访问你的站点的整个过程中都需要这些数据,请考虑会话。
发布于 2009-02-22 19:42:40
例如,当您的应用程序可能在计算机场中运行,而您不能将会话配置为使用sql server时(或者使用sql server会对性能造成太大的影响)。
https://stackoverflow.com/questions/575568
复制相似问题