根据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" />
那是怎么回事呢?
发布于 2011-01-24 15:03:12
在.net中创建标签并将其可见性设置为隐藏时,该标签不会呈现给客户端,并且其数据将存储在视图状态中。
因此,它并不比视图状态“更”安全,因为它使用视图状态来维护数据。
关于隐藏字段,有四种类型:第一种是常规的HTML字段,它只是一个隐藏类型的输入。虽然它在html中,但没有可见的呈现。它也没有viewstate属性。它被声明为:
<input id="MyId" type='hidden' value='whatever' />
第二个是带有css属性的常规输入,将其标记为隐藏:如果CSS被禁用或被覆盖,则该控件将对用户可见。除此之外,它与a type=‘隐藏’非常接近。
<input id='MyId' type='text' value='whatever' style='visibility:hidden' />
第三个是.Net隐藏字段。这确实有viewstate存储,但它也会导致在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)。如果你有一个秘密的值,那么如果可能的话,你通常不希望这个秘密传到客户端。这意味着将其排除在视图状态之外。顺便说一句,不要依赖视图状态的“安全性”,有一些工具可以很容易地解密它。
发布于 2011-01-24 15:00:48
没有显示的字段不是隐藏字段(即使它是“隐藏”的)。
隐藏字段是<input type="hidden" name="somename" value="somevalue" />
字段。而这些是可以被用户操纵的。
https://stackoverflow.com/questions/4783438
复制相似问题