.Net 我的學習之路(五) --- Asp.Net 頁面狀態的實現原理

    頁面狀態機制的具體實現原理

 

   上次我們講到了 Asp.net 提供了一系列的維持頁面狀態的機制,有 Session, Cookie, ViewState Application Cache HiddenField 等。這次我來討論一下一些機制是如何實現的。

  • Session Session 的實現是依賴於 SessionID 的,每次 client 端訪問 server 端的時候,服務器都會給 client 分配一個 SessionID ,下次 client 再次訪問的時候,在 Request 裏面把這個 SessionID 一起提交給 Server Server 就能根據 Request 裏面的 SessionID 來找到在 Server 端所儲存的數據了。那麼現在的問題就是這個 SessionID client 端被放在哪裏了呢?答案就是 Cookie 中,但是如果 client 端禁用了 Cookie ,那這個 SessionID 又該怎麼辦呢?哈哈,還可以通過 QueryString 來傳遞。所以 Session 機制的實現是依賴於 Cookie QueryString 的。

  • ViewState 。前文提到,在 ViewState 中存放的對象必須是可以序列化的對象,這是和它的實現機制有很大關聯的。序列化可以把內存中的對象轉變爲 string ,還可以根據 string 轉變回內存中的對象,這種機制是方便了我們進行對象的持久化。 Asp.net 把放入 ViewState 中的對象作爲一個整體序列化成爲一個 HiddenField string Value HiddenField 前文已經提到了,是一個頁面的隱藏域,每次 Postback 之後,這個 HiddenField 中的 value 就會被傳回並被反序列化爲 ViewState 。所以 ViewState 的實現就是依賴於 HiddenField ,你可以看見每個頁面再 Render client 端的時候都會帶有一個這樣的 HiddenField, <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="XXX"/> 。看,這就是在 Client 端的 ViewState 了,不過由於是序列化過的,我也不知道里面是什麼了。所以 ViewState 是不能在 Client 端進行操作的,不過普通的 HiddenField 就可以哦

 

  • 其他的頁面狀態實現的機制就比較簡單。 Cookie 是在 Client 端以文件方式存儲的。 Application Cache 是在 server 端內存中存儲。 QueryString 是在 Url 裏面存儲。 HiddenField 是以 Html 元素存儲。

     

     希望瞭解了這些機制以後,能使你更清楚地瞭解什麼時候該使用哪種機制來存儲頁面的狀態。

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章