代码之家  ›  专栏  ›  技术社区  ›  pavanred

为什么要使用隐藏字段?

  •  16
  • pavanred  · 技术社区  · 15 年前

    我经常看到Web应用程序中使用了很多隐藏字段。我已经使用了编写的代码,它使用了许多隐藏字段以及来回发送给它们的可见字段中的数据值。虽然我不明白为什么要使用隐藏字段。我几乎总能想办法解决相同的问题,而不需要使用隐藏字段。隐藏字段如何帮助设计?

    有人能告诉我隐藏字段到底有什么好处吗?为什么要使用隐藏字段?

    8 回复  |  直到 12 年前
        1
  •  17
  •   Thilo    15 年前

    隐藏字段是最简单的方法,这就是为什么它们被大量使用的原因。

    选择:

    • 在会话服务器端存储数据(使用sessionid cookie)
    • 在事务服务器端存储数据(事务ID为单个隐藏字段)
    • 在适用的情况下,使用URL路径而不是隐藏字段查询参数

    主要关注点:

    • 隐藏字段的值不能被信任,不能在页与页之间篡改(与服务器端存储相反)
    • 每次都需要发布大数据,这可能是一个问题,对于某些数据(例如上载的图像)是不可能的。

    主要优势:

    • 没有在页面和多个浏览器窗口之间溢出的粘性会话
    • 无需服务器端清理(对于过期数据)
    • 可访问客户端脚本
        2
  •  12
  •   mnemosyn    15 年前

    假设您想要编辑一个对象。现在,将ID放入一个隐藏字段是很有帮助的。当然,你必须 永远不要依赖这个价值 (即确保用户对 insert / update )

    不过,这是一个非常方便的解决方案。在可见字段(如只读文本框)中显示ID是可能的,但会刺激用户。

    将ID存储在会话/cookie中是禁止的,因为它不允许同时打开多个编辑窗口,并施加生存期限制(会话超时导致编辑操作中断,非常烦人)。

    使用URL是可能的,但违反了设计规则,即在修改数据时使用post。此外,由于它对用户可见,所以它会创建更丑的URL。

        3
  •  4
  •   jeriley    15 年前

    我看到/使用的最典型的用法是用于ID和其他一些实际上不需要出现在页面上的东西,而这些东西在某个时刻需要发送回服务器。

    -编辑,应该包含更多细节-

    例如,假设您有一个要更新的对象——用户界面返回一组值,此时服务器可能知道,也可能不知道“嘿,这是一个客户对象”,所以您向服务器发出一个请求,并说“嘿,给我ID 7”,现在您拥有了系统知道的客户对象。更新被应用、验证,不管什么,现在你的用户界面得到了完整的结果。

    我想一个很好的借口/理由是使用LINQ。尝试更新linq中的对象,而不首先从db获取它。它不知道它是什么东西,它可以跟踪,直到你得到完整的对象。

        4
  •  4
  •   Mesh    15 年前

    这里有一个原因,即在客户机代码(javascript)和服务器端之间传递数据的方便方法。

        5
  •  3
  •   user151323    15 年前

    有很多有用的场景。

    一种是在用户不应该输入的页面上“存储”一些数据。例如,在生成页面时存储用户ID,然后该值将与表单一起自动提交回服务器。

    另一个场景是安全性。向页面添加一些隐藏的令牌并检查它在服务器上的存在。这将有助于确定表单是通过浏览器提交的,还是由刚刚发布到网站上某个URL的某个bot提交的。

        6
  •  3
  •   Chris Conway    15 年前

    它将事情从URL中排除(如在querystring中),因此它保持了这一点。它还将可能不需要存在的事情排除在会话之外。

    除此之外,我想不出还有什么好处。

        7
  •  1
  •   pdbartlett    15 年前

    它们通常用于在交互过程中存储状态。可以使用cookies代替,但有些人会禁用它们。也可以使用单个隐藏字段来指向服务器端状态,但这样会出现会话粘性问题。

        8
  •  1
  •   Kirtish    12 年前

    如果在表单中使用隐藏字段,则通过包含新控件来增加表单的负担。

    如果不需要取隐藏字段,就不要取,因为它不适合在安全点的基础上使用。使用隐藏字段不属于良好的编程范围。因为它也会影响应用程序的性能。