【问题标题】:hidden field vs viewstate隐藏字段与视图状态
【发布时间】:2011-06-13 23:22:30
【问题描述】:

使用时有什么区别

  • 隐藏字段与视图状态?
  • 什么时候使用每一个?
  • 哪一种更安全?
  • 哪个性能更好?
  • 有哪些替代方案?

【问题讨论】:

  • 两者都不是真的比彼此更好或更差。你要存储什么?
  • 有时(产品的ID),有时是数据表等等..

标签: asp.net ajax performance security viewstate


【解决方案1】:

ViewState 存储在一个隐藏字段中,它包含有关整个页面的信息。它也可以被加密。因为在执行回发时视图状态总是发送到代码隐藏,所以它非常实用,因为您总是可以获取值。缺点是如果您开始在其中放入大量信息,它可能会变得非常大,并且性能可能会开始受到影响。例如,在某些 AJAX 请求中,您只想向服务器发送一些小信息,如果您使用了 UpdatePanel,则将发送整个 ViewState,其中包含不必要的信息。

【讨论】:

  • 是的,你的意思是在大量使用 AJAX 的情况下使用视图状态不是性能方面的明智之举?
  • @just_name,这取决于您如何使用 AJAX。如果您使用的是 UpdatePanels,那么不,这是不明智的,如果您使用的是 jQuery 等其他框架,则您可以完全控制发送到服务器的内容。
【解决方案2】:

可以在页面 HTML 源代码中查看隐藏字段,而 ViewState 至少可以说是经过混淆处理的,并且根据您的 .net 版本,可以进行不同程度的加密。

asp.net viewstate encryption

隐藏字段在性能上会更好,但不提供安全性,如果可以操纵发布数据,更改 ViewState 会容易得多。

会话变量是这些变量的一个很好的替代品。

【讨论】:

  • +1 例如,如果您希望客户端脚本能够轻松访问该值,请使用隐藏字段。
【解决方案3】:

ViewState 内部使用隐藏字段。由ASP.NET Engine管理,默认加密。

另一方面,通过隐藏字段控制,您可以管理其中存储的内容。默认情况下,它没有加密。

性能方面,两者是相同的。但是,我觉得ViewState 更安全。 ASP.NET 维护其哈希值以防止/识别任何对其客户端的篡改。

你也可以使用 session 来存储数据。

【讨论】:

  • ViewState 默认不加密 - 它是 Base64 编码的字符串。
猜你喜欢
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-20
  • 2014-02-08
相关资源
最近更新 更多