根据MSDN和MCTS自学培训,asp.net可以使用隐藏字段进行客户端状态管理.书籍材料继续说视图状态比隐藏字段更安全,因为数据是加密的.
我必须在这里遗漏一些东西.我设置了一个Label并将其隐藏起来.我可以将数据存储在这个隐藏的标签中,甚至不会发送到客户端浏览器.这不仅像服务器端状态一样(注意runat = server),但这似乎比视图状态更安全,因为不需要加密,因为客户端甚至看不到该字段.
<asp:Label ID="Label1" Visible="false" runat="server">secret info</asp:Label>
Run Code Online (Sandbox Code Playgroud)
将其与HTML输入字段进行对比.这里,客户端状态信息是有意义的.
<input id="Text2" type="text" style="visibility:hidden;" value="secret 99" />
Run Code Online (Sandbox Code Playgroud)
那是什么交易?
在.net中创建标签并将其可见性设置为Hidden时,它不会呈现给客户端,并且其数据存储在viewstate中.
因此,它不比viewstate"更"安全,因为它使用viewstate来维护数据.
关于隐藏字段,有四种:首先是常规HTML,它只是一个隐藏类型的输入.虽然它在html中,但它没有可见的渲染.它也没有viewstate属性.它被声明为:
<input id="MyId" type='hidden' value='whatever' />
Run Code Online (Sandbox Code Playgroud)
第二个是带有css属性的常规输入,将其标记为隐藏:如果CSS被禁用或以其他方式覆盖,则控件将对用户可见.除此之外,它非常接近与type ='hidden'相同的东西.
<input id='MyId' type='text' value='whatever' style='visibility:hidden' />
Run Code Online (Sandbox Code Playgroud)
第三个是.Net隐藏字段.这确实具有viewstate存储,但它也会导致在html中生成常规隐藏字段.
<asp:HiddenField id='MyId' runat='server' value='whatever' />
Run Code Online (Sandbox Code Playgroud)
并且,第四个是标记为不可见的常规.net文本框.
<asp:TextBox id='MyId' runat='server' Text='whatever' Visible='False' />
Run Code Online (Sandbox Code Playgroud)
.net将导致数据被放置在viewstate中.HTML没有.如果在.Net控件上设置Visible = False,则它不会呈现给客户端,但是它的数据通常存储在viewstate中.
还有其他方法可以将数据抛入页面,但它们是上述的推导.
一般来说,如果你有一个你的javascript代码需要的值,但你不需要将它显示给客户端,那么你使用隐藏字段(html或.net).如果你有一个秘密值,那么通常你不希望这种情况发生在客户端.这意味着甚至将其排除在视野之外.作为旁注,不要依赖于viewstate"security",那里有工具可以很容易地解密它.
| 归档时间: |
|
| 查看次数: |
3854 次 |
| 最近记录: |