原始的目的是<input type =“hidden”>?

我很好奇<input type="hidden">标签的原始目的。

现在,它经常和JavaScript一起用来存储发送给服务器的variables,以及类似的东西。

  • HTML 2.0于1995年11月发布,其中包含了input type =“hidden”
  • JavaScript于1996年3月发布

所以, <input type="hidden"> JavaScript 之前就存在了,那么它的初衷是什么呢? 我只能想象从服务器发送一个值到客户端(不变)发回来保持一种状态。 或者我在它的历史中遇到错误, <input type="hidden">总是应该和JavaScript一起使用?

如果可能的话,请在答案中提供参考。

我只能想象从服务器发送一个值到客户端(不变)发回来保持一种状态。

恰恰。 事实上,今天它仍然被用于这个目的,因为我们今天所知道的HTTP至less在根本上还是一个无状态的协议。

这个用例实际上是在HTML 3.2中首次描述的(我很惊讶,HTML 2.0没有包含这样的描述):

type=hidden
这些字段不应该呈现,并提供一种服务器存储表单状态信息的手段。 当提交表单时,将使用由相应属性定义的名称/值对将这些信息传递回服务器。 这是HTTP的无状态工作。 另一种方法是使用HTTP“Cookie”。

 <input type=hidden name=customerid value="c2415-345-8563"> 

值得一提的是,只有 JavaScript首次发布之后 ,HTML 3.2才成为W3C推荐标准,可以肯定的是,隐藏字段几乎总能达到同样的目的。

我将在这里提供一个简单的服务器端真实世界的例子,说如果logging是循环的,每个logging有一个删除button的forms,你需要删除一个特定的logging,所以这里是hidden领域的行动,否则你赢了在这种情况下,将不会删除要删除的logging的引用,它将是id

例如

 <?php if(isset($_POST['delete_action'])) { mysqli_query($connection, "DELETE FROM table_name WHERE record_id = ".$_POST['row_to_be_deleted']); //Here is where hidden field value is used } while(condition) { ?> <span><?php echo 'Looped Record Name'; ?> <form method="post"> <input type="hidden" name="row_to_be_deleted" value="<?php echo $record_id; ?>" /> <input type="submit" name="delete_action" /> </form> <?php } ?> 

总之,最初的目的是制作一个提交表格的领域。 有时,需要在隐藏字段中存储一些信息(例如,用户的id),然后用表单提交。

从1995年9月22日的HTML规范

一个带有TYPE = HIDDEN的INPUT元素代表一个隐藏的字段。用户不会与这个字段交互。 相反,VALUE属性指定了该字段的值。 NAME和VALUE属性是必需的。

表单元素的值(包括type ='hidden')在表单发布时被提交给服务器。 inputtypes=“隐藏”值在页面中不可见。 例如,在隐藏字段中维护用户标识是许多用途之一。

SO使用一个隐藏的领域upvote点击。

 <input value="16293741" name="postId" type="hidden"> 

使用此值,服务器端脚本可以存储upvote。

基本上隐藏的领域将更多的有用和优势使用多步骤forms。 我们可以使用隐藏的字段来传递一个步骤的信息到下一步使用隐藏,并保持转发,直到结束的一步。

  1. CSRF令牌。

跨站请求伪造( http://en.wikipedia.org/wiki/Cro … )是一个非常常见的网站漏洞。 在所有表单提交中要求秘密的用户特定的令牌将防止CSRF攻击,因为攻击站点不能猜测正确的令牌是什么,并且它们代表用户执行的任何forms提交将总是失败。

  1. 以多页forms保存状态。

如果您需要存储用户当前所处的多页表单中的步骤,请使用隐藏的input字段。 用户不需要看到这个信息,所以隐藏在一个隐藏的input字段中。

一般规则:使用该字段存储用户不需要查看的任何内容,但要在表单提交中将其发送到服务器。