zoukankan      html  css  js  c++  java
  • 隐藏域

       隐藏域其实是html网页代码中的隐藏类表单的标签,可以在里面写入值集,但在网页表面上是不会显示出来的。具体形式<input type="hidden" name="" id="" value="123456"/>。

    可见type="hidden"就表示它是隐藏域,在value中保存一些值集,通过name、id或其他方式进行获取和修改。
    它有很多作用例如:传值、安全,都会用到的,当你缺什么值就可以在页面隐藏传值,页面不显示。功能与其他的input一样,只不过用户不能直接看见,用来辅助服务器完成一些动作。

    隐藏域在页面中对于用户是不可见的,在表单中插入隐藏域的目的在于收集或发送信息,以利于被处理表单的程序所使用,下面为大家详细介绍下此隐藏域在实际中时如何使用的:
    基本语法:
    <input type="hidden" name="field_name" value="value">

    作用:

    1 隐藏域在页面中对于用户是不可见的,在表单中插入隐藏域的目的在于收集或发送信息,以利于被处理表单的程序所使用。浏览者单击发送按钮发送表单的时候,隐藏域的信息也被一起发送到服务器。

    2 有些时候我们要给用户一信息,让他在提交表单时提交上来以确定用户身份,如sessionkey,等等.当然这些东西也能用cookie实现,但使用隐藏域就简单的多了.而且不会有浏览器不支持,用户禁用cookie的烦恼。

    3 有些时候一个form里有多个提交按钮,怎样使程序能够分清楚到底用户是按那一个按钮提交上来的呢?我们就可以写一个隐藏域,然后在每一个按钮处加上onclick="document.form.command.value="xx""然后我们接到数据后先检查command的值就会知道用户是按的那个按钮提交上来的。

    4 有时候一个网页中有多个form,我们知道多个form是不能同时提交的,但有时这些form确实相互作用,我们就可以在form中添加隐藏域来使它们联系起来。

    5 javascript不支持全局变量,但有时我们必须用全局变量,我们就可以把值先存在隐藏域里,它的值就不会丢失了。

    6 还有个例子,比如按一个按钮弹出四个小窗口,当点击其中的一个小窗口时其他三个自动关闭.可是IE不支持小窗口相互调用,所以只有在父窗口写个隐藏域,当小窗口看到那个隐藏域的值是close时就自己关掉。

    隐藏域---ViewState---ControlState----->保存数据的另一个场所

    1.使用隐藏域

      除了Session、Application和Cache可以保存数据外,那还有哪里可以让我们暂时保存数据呢?那就是页面!我们可以设置一个控件隐藏,那我们就可  以用这个控件来保存一些临时数据,供当前页面的程序使用
     
      同时,我们还可以使用隐藏域来进行类似的工作,但在隐藏域中填写的内容不会直接显示在IDE的设计视图中,代码如下:
      <asp:HiddenField ID="HiddenField1" runat="server" Value="编程快乐"/>

      在代码中可以直接访问隐藏域的Value属性获得其值:
      Response.Write(HiddenField1.Value);

      不过,这样做有几个不合理的地方:
      数据直接暴露给用户、只能存储字符串数据


    2.使用ViewState(视图状态)

      ViewState主要是用来存放和视图有关的一些状态,ASP.NET通过ViewState自动保存控件的状态,同时,我们也可以利用ViewState来保存一些程序需  要的数据,ViewState中的数据默认是使用base64进行编码的,因此,用户不能直接看到里面的数据
     
      在代码中添加一个ViewState项:  ViewState["test"]="编程快乐";
      查看源代码:<input type="hidden" name="_VIEWSTATE" id="_VIEWSTATE" value="xt+q3cdaffdsaefcsaesefdserfs">

      既然ViewState是存在页面上,那么ViewState则不能跨页使用,每个用户访问到得ViewState都是独立的,另外,页面在ViewState就在,页面关闭  ViewState就关闭

     
    3.ViewState的安全与性能

      保证安全性:保证客户端提交过来的ViewState没有被修改、保证用户不能直接看到ViewState中的数据(加密)

      对ViewState进行验证和加密:
      <%@ Page Language="C#" EnableViewStateMac="true" ViewStateEncryptionMode="Always"%>

      如果要对所有页面进行ViewState的验证和加密,可以在Web.config的system.Web节点中添加:
      <pages enableViewStateMac="true" ViewStateEncryptionMode="Always"></pages>

      既然ViewState中的数据时序列化后加入的,那么我们就可以把一些复杂的类型(比如类)存放到ViewState中,比如:
      MyUser user=new MyUser("小猪",20);
      ViewState["CustomClass"]=user;

      读取代码:
      MyUser user=ViewState["CustomClass"] as MyUser;

      ViewState中尽量保存少量的数据,如果实在需要在ViewState中放置大量的数据建议使用maxPagesStateFieldLength对ViewState启用分块传输:
      <%@ Page Language="C#" maxPageStateFieldLength="100"%>

      ASP.NET会把控件交互相关的一些数据都存放到ViewState中,但是对于一些不识闲任何交互的控件,可以设置控件的EnableViesState属性为false来  让控件不适用ViewState,从而减少页面体积

     

    4.ControlState
      用于保存(自定义)控件的关键信息
      就算页面或者控件的ViewState被关闭它还能起作用,弥补了ViewState能被禁止的不足
      但是使用ControlState稍显复杂,我们需要自己序列化复杂对象进行存储

      在ControlState中保存和读取简单字符串的代码:
         PageStatePersister.ControlState="编程快乐";
         Response.Write(PageStatePersister.ControlState.ToString());

    5.对隐藏域、ViewState和ControlState的总结
     
        存储的物理位置:表单隐藏域
        存储的类型限制:可序列化类型(直接在隐藏域中保存内容需要自己序列化)
        状态使用的范围:当前页面(当前控件),对用户独立
        存储的大小限制:存储过大数据会导致页面不能正常打开,不能正常提交
              生命周期:页面在就在,页面不在就不在了,三者始终是衣服在页面的隐藏域中
            安全与性能:在客户端存储,安全性低,不过,ViewState提供了验证和加密
      优缺点与注意事项: 存储少量数据非常方便简单,但需要注意不要存储敏感数据,不要存储过大数据,隐藏域、ViewState和ControlState始终参与                   往返,而且序列化和反序列化会消耗一定资源,因此,存储过大的数据会导致网页加载过慢,浪费服务器带宽

     
      HTML语言创建普通隐藏域
     
      <input type="hidden" name="hdncount" value="值">
     
      JavaScript语言创建隐藏域
     
      <script>
     
      function add(value)
     
      {
     
      var value= 1
     
      document.all.divHidden.innerHTML="<input type=hidden name=hdncount value=" + value+ ">";
     
      }
     
      </script>
     
      注意:
     
      表单提交时因为隐藏域的ID是一样的,在多个隐藏域时,提交到action或者接收页面的为数组的形式。
     
      Dreamweaver插入隐藏域
     
      菜点栏“插入”→“表单”→“隐藏域”→点击设计视图中的隐藏域→在“属性”面板中输入“required”→在“值”中输入要求的项目
     
      在.net中,隐藏域是利用HiddenField来实现的
     
      这里的隐藏域同其他的一样不显示在用户的浏览器中,但是我们可以像设置标准控件的属性一样设置其属性。
     
      当一个网页被提交给服务器时,隐藏域的内容和其他控件的值一块被送到HTTP Form集合中。
     
      隐藏域的优点
     
      1、不需要任何服务器资源。
     
      2、支持广泛,任何客户端都支持隐藏域。
     
      3、实现简单,隐藏域属于HTML控件,无需像服务器控件那样有需要编程知识。
     
      隐藏域的不足
     
      1、具有较高的安全隐患。
     
      2、存储结构简单。
     
      3、如果存储了较多的较大的值,则会导致性能问题。
     
      4、如果隐藏域过多,则在某些客户端中被禁止。
     
      5、隐藏域将数据存储在服务器上,而不存储在客户端。
     
      注意,如果开发中,页面的隐藏域过多,这些隐藏域被存储在服务器。当客户端浏览页面的时候,会有一些防火墙扫描页面,以保证操作系统的安全,如果页面的隐藏域过多,那么这些防火墙可能会禁止页面的某些功能。
  • 相关阅读:
    浅谈Lyndon分解
    【CF914G】Sum the Fibonacci(FWT)
    【洛谷6914】[ICPC2015 WF] Tours(非树边随机边权,树边边权异或)
    【洛谷7143】[THUPC2021 初赛] 线段树(动态规划)
    【洛谷7325】[WC2021] 斐波那契(数论)
    【CF666E】Forensic Examination(广义后缀自动机+线段树合并)
    【CF685C】Optimal Point(二分答案)
    【洛谷7364】有标号二分图计数(多项式开根)
    【CF679E】Bear and Bad Powers of 42(ODT+线段树)
    【洛谷5307】[COCI2019] Mobitel(动态规划)
  • 原文地址:https://www.cnblogs.com/wuhan729/p/8443332.html
Copyright © 2011-2022 走看看