2011-01-24 31 views
5

根據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" /> 

那麼這是怎麼回事?

回答

7

在.net中創建標籤並將其設置爲隱藏可見性時,它不呈現給客戶端,其數據存儲在視圖狀態中。

因此,它不比viewstate更「安全」,因爲它使用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隱藏字段。這確實有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)。如果您有祕密價值,那麼通常情況下,您不希望這種情況發生在客戶端,如果可能的話。這意味着即使將它保持在視野之外。作爲一個方面說明,不要依賴視圖狀態「安全性」,那裏有工具可以輕鬆解密它。

+0

啊!所以這是祕訣。謝謝克里斯 – 2011-01-24 15:05:00

3

未顯示的字段不是隱藏字段(即使它是「隱藏的」)。

隱藏字段爲<input type="hidden" name="somename" value="somevalue" />字段。這些可以由用戶操縱。

+0

但是不能以同樣的方式使用Label和HTML輸入嗎?爲什麼隱藏字段不被認爲是客戶端和服務器端技術? – 2011-01-24 15:02:57