熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

詳細介紹ASP.NET狀態保存方法

2022-06-13   來源: .NET編程 

  ASPNET狀態保存分為客戶端保存和服務器端保存兩種

  使用客戶端選項存儲頁信息而不使用服務器資源的這些選項往往具有最低的安全性但具有最快 的服務器性能因為對服務器資源的要求是適度的但是由於必須將信息發送到客戶端來進行存儲因此對於以這種方式可以存儲多少信息存在一定的客觀限制

  客戶端保存的方式一般有如下

       ViewState:

  利用場合為在對同一頁的多個請求間自動保留值多用於客戶端的一些事件典型利用場合為頁面信息重置 登陸出錯次數統計Grid列排序等

  優點不利用服務器端資源實現簡單相對高的安全性因為經過哈希計算和壓縮並且針對 Unicode 實現進行編碼

  缺點因為ViewState存儲在頁面本身所以無法存儲較大的值並且通過源文件可以看見其中的值 雖然經過哈希計算和壓縮但仍有被篡改的風險

  可存儲的類型stringintegerboolarrayarr aylisthashtable以及其他可以序列化的類型

       HiddenField:

  利用場合為存儲少量頁面 中經常改動的信息多和客戶端腳本一塊使用典型利用場合為客戶端經歷一系列驗證之後向服務器端回發服務器端從客戶端HiddenField中獲取值進行處理例如 LeyserHomepage中要刪除一項產品需要在客戶端彈出確認Form用戶確認之後再PostBac k回服務器端進行數據庫Delete操作當用戶確認要刪除時將當前要刪除的產品ID存放到一個HiddenField中然後執行 Form()submit回發到服務器端服務器端再從HiddenField獲取產品ID值進行數據庫操作

  優點不使用服務器資源 廣泛支持實現簡單

  缺點安全性不高因為它被包含在頁面上進行發送所以可以通過源文件看見他的內容存儲結構少僅僅支持stringintegerboolarrayarraylis t等簡單的數據結構並且在其上只存放簡單的單值若要存放多值需要額外編碼存儲量少因為它被存儲在頁面本身所以 無法存儲較大的值而且大的數據量會受到防火牆和代理的阻止 注意 使用了HiddenField之後需要回發到服務器進行 處理應該使用Http Post方法而不是Http Get方法(通過URL請求訪問)

       Cookie:

  利用場合為存儲少量頁面中經常改動的信息典型利用場合為為登陸過的網站保存登陸用戶名為用戶輸入提供方便 還有在一些用戶自定義項目上保存用戶的個性化設置

  優點不使用服務器資源實現簡單可配置到期時間

  缺點大小受到限制一般浏覽器支持的最大的Cookie 容量為字節客戶端用戶可能會配置為拒絕Cookie安全性保存在客戶端的信息可能會被惡意用戶修改或者獲取所以不應該保存敏感信息持久性保存期限受到客戶端的配置影響

  Cookie 通常用於 存取已知用戶自定義內容的個性化情況在大多數此類情況中Cookie 是作為標識而不是身份驗證所以在 Cookie 中只存 儲用戶名賬戶名或唯一用戶 ID(例如 GUID)並使用它來訪問站點的用戶個性化結構是足夠的了

       QueryString:

  利用場合為 將信息從一頁傳遞給另一頁的最簡單的方法

  優點不使用服務器資源支持廣泛實現簡單

  缺點安全性因為直接在URL中暴露給用戶 所以有被篡改的風險容量有限一般的浏覽器都有個字符的限制只有在通過其 URL 請求頁時查詢字符串才是可行的選擇不能從已提交給服務器的頁讀取 查詢字符串

  視圖狀態:需要為將回發到自身的頁存儲少量信息ViewState 屬性的使用將提供具有基本安全性的功能   

  隱藏域需要為將回發到自身或另一頁的頁存儲少量信息並且不需要較高的安全性 (客戶端事件)只能在提交到服務器的頁上使用隱藏域 

  Cookie需要在客戶端存儲少量信息並且不需要較高的安全性(個性化)     

  查詢字符串 可以將少量信息從一頁傳輸到另一頁並且不需要較高的安全性 (頁面跳轉 )只有在請求同一頁或通過鏈接請求另一頁時才能使用查詢字符串   

  服務器端保存方式一般有如下

  存儲頁信息的服務器端選項往往比客 戶端選項具有更高的安全性但它們可能使用更多的 Web 服務器資源這可能在信息存儲量較大時導致可縮放性問題

       Application:

  利用場合所有的請求都會需要的 一些共有資源由最先的一個請求率先獲取之後拿出來共享其他的請求就不用浪費資源進行再次獲取典型利用場合一個股市 Web 站點可能在一天中每 分鐘從數據庫獲取大量的金融股票信息(也許是 MB 的數據)然後將這些信息緩存在應用程序狀態中這樣所有以後的查找請求都可以在應用程序狀態中訪問這些信息其結果是極大地提高了每個 請求的性能因為傳入的請求不需要跨進程跨計算機或數據庫的往返過程

  首次Http Get請求

  If Not MeIsPostBack Then

  先判斷Application中是否已経有了緩存

  If ApplicationItem(Database) Is Nothing Then

  若沒有從DataCenter中獲取

  Dim ds As New DataSet

  dsReadXml(ServerMapPath(TestDataxml))

  Dim dv As New DataView(dsTables())

  拿到之後 緩存到Application方便別的進程Http Get請求復用

  ApplicationAdd(DataBase dv)

  End If

  Dim dv As DataView

  dv = ApplicationItem(DataBase)

  緩存到Session 方便當前進程的Http Post請求

  SessionAdd(DataBase dv)

  End If

  優點易於實現全局范圍

  缺點持久性若 保存數據的服務器端進程被強行關閉那麼數據就會丟失所以利用Application一定要有保底的策略有的話就使用沒有的話就自己拿耗用服務器端的內存

  注意因為Application中的數據被多個進程公用所以若需要更新其中的值時需要利用 如下的語句做到獨占更新

  ApplicationLock()

  ApplicationItem(DataBase ) = NewDataBase

  ApplicationUnLock()

       Session:

  利用場合單獨的一個進程內部使用存儲單獨會話的短期的敏感的數據

  優點易於實現持久性可以應對IIS重啟和輔助進程重啟 可在多進程中使用

  缺點耗用服務器端的內存

       Database:

  優點安全性 容量 持久性 可靠性和數據完整性 可訪問性 廣泛支持

  缺點復雜性能

  方法    使用場合       

  應用程序狀態    存 儲更改不頻繁的全局信息這些信息由多個用戶使用此時安全性不成為問題不要在應用程序狀態中存儲大量的信息   

  會話狀態        存儲特定於單獨會話的短期信息並且需要較高的安全性不要在會話狀態中存儲 大量的信息在支持許多用戶的應用程序中這可能會占用大量服務器資源並影響可縮放性     

  數據庫支持      存儲大量信息管理交易或者信息必須可以經受得住應用程序和會話重新啟動數據挖掘十分重要並且需要較高的安全性


From:http://tw.wingwit.com/Article/program/net/201311/13257.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.