Viewstate 或 Session 的全部原因是将 Web 从无状态系统转变为动态的定制体验。当用户请求一个页面时,您可以从用户停止的地方继续进行体验的唯一方法是记住服务器或用户客户端上的状态。
Viewstate 是一种在客户端记住用户状态的机制。会话是一种在服务器上记住用户状态的机制。
Viewstate 是一种瞬态存储机制。使用 viewstate 的控件将其状态作为隐藏输入呈现到 html 页面中。为了防止篡改,它被签名。但是,它没有加密,因此您可能希望避免将任何敏感信息放在那里。Viewstate 对于您想要跨一系列多个请求(页面加载)发布的情况很有用。这方面的一个示例是当表单未验证时,因为用户可能输入了错误的电子邮件地址或其他内容,并且您希望将表单恢复为用户提交之前的状态。这样做的缺点是视图状态是一个饥饿的野兽,可以轻松地将页面大小增加 30-50%。
另一方面,会话存储在服务器上。客户端得到一个令牌,告诉服务器哪个内存块是他们的。这可能比视图状态更安全,因为数据不会一遍又一遍地重新传输给用户。不过也有取舍。您的服务器可能内存不足。或者,如果会话中断,用户可能会丢失数据。
一般来说,没有“正确”的答案可供使用。这完全取决于您要完成的工作。
大多数与控件有关的事情都应该使用 Viewstate。但是,如果您正在处理敏感信息,请考虑使用 Session。如果您有一组特定页面的数据,请使用 viewstate。如果您在用户访问您的网站期间需要数据,请考虑 Session。