【问题标题】:Why are hidden fields considered client side state management?为什么隐藏字段被视为客户端状态管理?
【发布时间】:2011-01-24 14:57:17
【问题描述】:

根据MSDN 和 MCTS 自定进度培训,asp.net 可以使用隐藏字段进行客户端状态管理。书籍材料继续说视图状态比隐藏字段更安全,因为数据是加密的。

我一定在这里遗漏了什么。我设置了一个标签并将其隐藏。我可以将数据存储在这个隐藏标签中,甚至不会发送到客户端浏览器。这不仅像服务器端状态一样工作(注意 runat=server),而且这似乎比视图状态更安全,因为客户端甚至看不到字段,因此不需要加密。

<asp:Label ID="Label1" Visible="false" runat="server">secret info</asp:Label>

将此与 HTML 输入字段进行对比。在这里,客户端状态信息是有意义的。

<input id="Text2" type="text" style="visibility:hidden;" value="secret 99" />

那么交易是什么?

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    当您在 .net 中创建标签并将其可见性设置为隐藏时,它不会呈现给客户端,并且其数据存储在 viewstate 中。

    因此,它并不比视图状态“更”安全,因为它使用视图状态来维护数据。

    关于隐藏字段,有四种:第一种是普通的 HTML,它只是一个隐藏类型的输入。尽管它在 html 中,但它没有可见的渲染。它也没有视图状态属性。它被声明为:

    <input id="MyId" type='hidden' value='whatever' />
    

    第二个是常规输入,带有一个 css 属性将其标记为隐藏:如果 CSS 被禁用或以其他方式覆盖,则该控件将对用户可见。除此之外,它与 type='hidden' 非常接近。

    <input id='MyId' type='text' value='whatever' style='visibility:hidden' />
    

    第三个是 .Net 隐藏字段。这确实有视图状态存储,但它也会导致在 html 中生成一个常规隐藏字段。

    <asp:HiddenField id='MyId' runat='server' value='whatever' />
    

    第四个是一个常规的 .net 文本框,被标记为不可见。

    <asp:TextBox id='MyId' runat='server' Text='whatever' Visible='False' />
    

    .net 会导致数据被放置在视图状态中。 HTML 没有。如果您在 .Net 控件上设置 Visible=False,则它不会呈现给客户端,但它的数据通常存储在视图状态中。

    还有其他方法可以将数据扔到页面中,但它们是上述方法的派生。

    一般来说,如果您的 javascript 代码需要一个值,但您不需要将其显示给客户端,那么您可以使用隐藏字段(html 或 .net)。如果您有一个秘密值,那么如果可能的话,通常您不希望它转到客户端。这意味着甚至将其置于视图状态之外。作为旁注,不要依赖视图状态“安全性”,那里有工具可以轻松解密它。

    【讨论】:

    • 啊!所以这就是秘方。谢谢克里斯
    【解决方案2】:

    未显示的字段不是隐藏字段(即使它是“隐藏的”)。

    隐藏字段是&lt;input type="hidden" name="somename" value="somevalue" /&gt; 字段。并且这些都可以被用户操纵。

    【讨论】:

    • 但是标签和 HTML 输入不能以完全相同的方式使用吗?为什么隐藏字段不被视为客户端和服务器端技术?
    猜你喜欢
    • 2015-11-12
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 2013-11-01
    • 2011-07-13
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    相关资源
    最近更新 更多