为什么隐藏字段被视为客户端状态管理?

时间:2011-01-24 14:57:17

标签: asp.net

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

我必须在这里遗漏一些东西。我设置了一个Label并将其隐藏起来。我可以将数据存储在这个隐藏的标签中,甚至不会发送到客户端浏览器。这不仅像服务器端状态一样(注意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" />

那是什么交易?

2 个答案:

答案 0 :(得分:7)

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

因此,它不比viewstate“更”安全,因为它使用viewstate来维护数据。

关于隐藏字段,有四种:首先是常规HTML,它只是一个隐藏类型的输入。虽然它在html中,但它没有可见的渲染。它也没有viewstate属性。它被声明为:

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

第二个是带有css属性的常规输入,将其标记为隐藏:如果禁用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将导致数据被放置在viewstate中。 HTML没有。如果在.Net控件上设置Visible = False,则它不会呈现给客户端,但它的数据通常存储在viewstate中。

还有其他方法可以将数据投放到页面中,但它们是上述内容的推导。

一般来说,如果你有一个javascript代码需要的值,但你不需要将它显示给客户端,那么你使用隐藏字段(html或.net)。如果你有一个秘密值,那么通常你不希望这种情况发生在客户端。这意味着甚至将其排除在视野之外。作为旁注,请不要依赖于viewstate“security”,那里有可以轻松解密的工具。

答案 1 :(得分:3)

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

隐藏字段为<input type="hidden" name="somename" value="somevalue" />个字段。那些可以被用户操纵。