標籤:
WEb程式儲存狀態的方式有這樣幾種:
1.Application:儲存在Application中的資料是全域有效;Application裡面存放的應該是訪問多修 改較少並且是全域至少大部分功能會使用的資料,例如計數器或者資料庫連接串等。
Application.Lock();
((int)Application["Count"])++;
Application.Unlock();
2.Session:在Asp.Net內部,有一個StateApplication來管理Session
3.Cookie
4.ViewState:實際上ViewState並不神秘,就是一個Hidden欄位,但是他是伺服器控制項狀態儲存的基礎
下面我們分別介紹這幾種:
ViewState
例如:
<form name="form1" method="post" action="modi_user_info.aspx"language="javascript" onsubmit="javascript:return WebForm_OnSubmit();"id="form1"><input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /><input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value=""/><input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"value="/wEPDwUKLTIzODM0NzQ5OQ9kFgICAQ9kFgRmDw8WAh4EVGV4dAUHamFzbWluZWRkAggPDxYCHwAFDDA1OTEwMDAwMDYxM2RkZA==" />
做過Web程式的人可能都有這種痛苦的體會,有時候為了處理頁面上面比較複雜的功能,
常常會加很多Hidden,然後在伺服器端用一大堆判斷來分析目前的狀態,寫起來煩人,
寫完了代碼更是難看;實際上,ViewState就是幫我們系統的實現了儲存控制項狀態的功能
,伺服器端控制項能夠在多次請求間儲存狀態也全靠它。
1、ViewState是存放在用戶端,因此會減輕伺服器的負擔,是一種比較好的儲存資料的
方式。
2、因為ViewState本身的限制,只能儲存可以序列化的對象,而且最好不要放太多東
西,能省則省,以免在減慢傳輸的速度,以及加重伺服器解析的負擔。
3、我們通過很簡單的方式就可以把ViewState裡面的值擷取出來,我們上面討論了一
些,雖然沒有把解析的代碼寫出來,但是利用LosFormatter可以得到ViewState反序列
化後的對象,那麼要解析出來簡直是易如反掌;所以ViewState在安全性上面還是比較,建議不要
存放比較機密和敏感的資訊,儘管ViewState可以加密,但是由於ViewState要儲存在客
戶端,天生就有安全性的隱患。
[C#]
// 儲存在 ViewState 中
ViewState["SortOrder"] = "DESC"; 字串5
// 從 ViewState 中讀取
string sortOrder = (string)ViewState["SortOrder"];
如果要使用 ViewState,則在 ASPX 頁面中必須有一個伺服器端表單標記 (<form
runat=server>)。表單欄位是必需的,這樣包含 ViewState 資訊的隱藏欄位才能回傳
給伺服器。而且,該表單還必須是伺服器端的表單,這樣在伺服器上執行該頁面
時,ASP.NET 頁面架構才能添加隱藏的欄位。
在頁面不回傳的情況下,可以通過省略伺服器端的 <form> 標記來去除頁面中的
ViewState。
Session
Session值是儲存在伺服器記憶體上的,那麼,可以肯定,大量
(11)Web程式儲存狀態的幾種方式,Application,Session,Cookie,ViewState