【问题标题】:Which is best to use ViewState or hiddenfield哪个最好使用 ViewState 或 hiddenfield
【发布时间】:2009-10-22 17:06:23
【问题描述】:

我有一个页面,我想在回发之间维护对象的值。 我在想两种方法来保持对象的价值

  1. 将值存储在查看状态中
  2. 将值存储在隐藏字段中

根据性能使用哪个是最佳选择

【问题讨论】:

    标签: c# asp.net viewstate hiddenfield


    【解决方案1】:

    Viewstate 如果您不需要需要在客户端脚本中引用它。如果你这样做,一个隐藏的字段。

    还要考虑,如果数据是敏感的,则默认情况下会加密 Viewstate,而默认情况下,隐藏字段会将其存储为任何知道如何查看源代码的人都可以看到的纯文本。

    编辑

    根据@Andrew Hare 关于他自己答案的注释,我正在编辑这个。这是一个足够重要的区别。我不希望有人根据我的疏忽认为他们使用 Viewstate 是“安全的”。

    默认情况下,Viewstate 未加密,它以 Base-64 编码存储。它可以很容易地解码,因此使用 Viewstate 因为它默认加密是无效的。它比纯文本要好,但对任何能够谷歌“解密视图状态”或“解码视图状态”的人来说都不是。

    所以不要依赖 Viewstate 来保护您在客户端代码中的隐藏信息。

    一篇文章here 讲述了如何正确加密它。 (但也警告性能问题)。

    【讨论】:

      【解决方案2】:

      这并不重要,因为 ViewState 本身存储在隐藏的输入中。使用对您来说更容易的一个。如果由我决定,我会选择 ViewState,因为 ASP.NET 运行时将为您处理对象的序列化和反序列化。

      【讨论】:

      • 我不确定我是否同意... Viewstate 是加密的,默认情况下隐藏字段不是,除非我遗漏了什么。我通常相信你的回答,所以我敢打赌我错过了一些东西。
      • 不,你说得很好 - ViewState 可以加密(但并不总是 - 默认情况下它只是 base-64 编码)。不错的收获! :)
      • 谢谢!当然,您对 base-64 的看法是正确的。这是一个重要的区别。我正在编辑我的答案以反映这一点。
      【解决方案3】:

      我喜欢 ViewState - 它更难破解 - 一个讨厌的人可以轻松地将您的页面提交给您,而您的隐藏字段中包含错误数据

      【讨论】:

        【解决方案4】:

        您希望将其存储在视图状态中。隐藏字段可以在浏览器上更新,因为它们旨在存储可以在客户端操作的信息。视图状态将由 asp.net 验证以防篡改,您必须自己对隐藏字段执行此操作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-02-11
          • 2023-03-27
          • 2012-05-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-02
          相关资源
          最近更新 更多