.Net 我的學習之路(四) --- Asp.Net 頁面狀態

    Web開發有一個很大的特點,就是基於 Http 協議的通信方式。 Http 協議特點就是一個 Request 就有而只有一個 Response ,而且是無狀態的通信方式。什麼是無狀態呢?那就是 client 端並沒有一個狀態記錄,每次 client 端的頁面都是從 server 端重新加載的, client 端之前所有的一切都會丟失,被從 server 端的數據重新覆蓋。這就是爲什麼你在瀏覽網頁的時候會看見出現一閃即逝的白屏,那就是 client 端刷新到之前的網頁,而開始渲染剛從 server 端讀到的數據。

 

這個特點非常重要,對我們實現一些功能有很大的影響。更詳細的 http 模型請參考

那麼因爲 Asp.net 可以像有狀態一樣操作呢。我登陸了一個網站,接着我都是以我這個身份瀏覽其他頁面。我開始搜索,把搜索結果翻到第二頁,搜索條件我並沒有重新輸入啊。這些操作除了頁面有刷新,其他的就像你操作一個 winform 程序沒什麼區別。那 Asp.net 是怎麼做到的呢?

答案就是頁面狀態。 Asp.net 允許使用各種技術來幫助我們維持頁面狀態。

1.  Session 當用戶打開一個網站,就 server 端會分配一個 Session ,每個用戶的 Session 都保存在服務器端,各不一樣,不會被互相干擾。在 Asp.net 中的 Session 是一個 Dictionary[string, object] 。你可以用 Session[“key1”] = 100, 或者 object value1 = Session[“key1”]

2.  Cookie 用戶對應每個網站,都會在 client 端開闢一個 cookie 文件,來保存用戶的 cookie 信息。 Cookie 只能存儲 string 類型的信息,而且避免記錄敏感信息,因爲 Cookie 記錄在 client 端,容易被人竊取。需要注意的是, cookie 是可以被用戶禁用的,所以在開發網頁的時候不能太過依賴 cookie

3.  ViewState ViewState asp.net 的一個概念,可以存儲一個頁面上的所有狀態。特別要提示的是 ViewState 只能保存一個頁面的狀態,跨頁面就不行了。 ViewState 是一個類似 Dictionary[string, object] 的集合。它的用法和 Session 差不多,不過需要注意的是放入 ViewState 中的 object 必須是能夠被序列化的。所有頁面中的控件都會有自己的 ViewState ,不會相互干擾。

4.  HiddenField Asp.net 有一個 HiddenField 控件,你會發現添加了這個控件頁面並沒有任何顯示,但其實它是一個隱藏控件,在 html 下的表示爲 <input type=”hidden”/> 。是可以保持頁面的數據。它的功能有點像 ViewState ,不過只能保存 string 類型的數據。

5. QueryString QueryString 是一種對 Url 上的請求,比如: http://localhost/default.aspx?key1=value1&key2=value2 Asp.net 中, QueryString 是一個類似 Dictionary<string, string> 的數組。你可以用 string value1 = QueryString[“key1”] 來取值。

6.  Application Application server 端的一個全局的狀態變量。要注意的是,首先,這個狀態變量是建立在內存中的,其次是這個狀態變量是可以被網站的所有頁面訪問的。這就意味着它只能存儲一些要公佈的信息,而不能存儲一些比較個人的信息了。

7.  Cache Cache 也是 server 端的全局的狀態變量,而且它除了擁有 Application 的功能以外,還有一些它自己的特性,自動更新和釋放。所有 Cache 比起 Application 更具有靈活性。在 Asp.net 裏面你可以這樣使用 Cache Cache["key1"] = "Value 1"; 或者  Cache.Add("Key1", "Value");

 

 

以上就是 Asp.net 可以使用的保持頁面狀態的機制。但是不要忘記,所有開闢在 server 端內存中的頁面狀態都會因爲 website 重啓中消失,但是導致 website 重啓的可能性實在太多,所以太過依賴於服務器的 Session,Application,Cache 都不是安全的。當然, Asp.net 允許我們並不一定把頁面狀態存放在內存中哦,讓我在之後講。

 

 


 

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