根据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" />
那是什么交易?
答案 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" />
个字段。那些可以被用户操纵。