認識ASP.NET工作階段狀態

來源:互聯網
上載者:User
一、工作階段狀態的功能
  HTTP 是一個無狀態的協議,所以它不自動指示一個請求序列是否都來自相同的用戶端,甚至不指示單個瀏覽器執行個體是否仍活躍地查看某個頁或網站。而使用ASP.NET內建的工作階段狀態功能,可以使用我們做到
  1、對從單個瀏覽器用戶端到伺服器上邏輯應用程式程式會話的請求進行自動識別和分類。
  2、將會話範圍的資料存放區在伺服器上以供跨多個瀏覽器請求使用。
  3、引發適當的可在應用程式代碼中處理的會話生存期管理事件(Session_OnStart、Session_OnEnd 等)
  二、工作階段狀態的標識
  在建立會話時,伺服器會為每一個會話產生一個單獨的標識。該標識用 120 位的 SessionID 字串表示,該字串只包含 URL 中所允許使用的 ASCII 字元。SessionID 值是使用保證唯一性和隨機性的演算法產生的,其中保證唯一性的目的是確保會話不衝突,保證隨機性的目的是確保懷有惡意的使用者不能使用新的 SessionID 來計算現有會話的 SessionID。
  三、工作階段狀態的儲存方式
  工作階段狀態有三種儲存方式
  1、進程內工作階段狀態模式(Inproc):當我們建立一個WEB程式後預設的採用的進程內工作階段狀態模式,這也是大家所普遍採用的模式。在這種模式下工作階段狀態儲存在本地的 ASP.NET 輔助進程中,可以說到目前為止,進程內工作階段狀態模式可能是最快的訪問選項。但會話中儲存的資料越多,Web 服務器所消耗的記憶體就越多,這樣會潛在地增加效能降低的風險。
  2、.NET 狀態伺服器模式(StateServer):工作階段狀態儲存在遠程進程中(例如,名為 aspnet_state.exe的 indows NT 服務中)
  3、SQL 模式(SQLServer):工作階段狀態儲存到由 SQL Server 管理的專用資料庫表中。
  .NET 狀態伺服器模式和SQL 模式都可以稱為進程外會話模式,當儲存資料時,需要將資料序列化儲存到外部儲備庫,當讀取和資料時,需要將資料還原序列化,複製到本地會話詞典中,所以請求導致效能下降了 15%(進程外)到 25% (SQL Server)。注意這隻是一種粗略的估計。但是在進程外儲存方案中,工作階段狀態存活的時間較長,使應用程式的功能更強大,因為它可以防止 Microsoft? Internet 資訊服務 (IIS) 和ASP.NET 失敗。通過將工作階段狀態與應用程式相分離,您還可以更容易地將現有應用程式擴充到 Web Farm 和 Web Garden 體繫結構中。另外,工作階段狀態儲存在外部進程中,從根本上消除了由於進程迴圈而導致的周期性資料丟失的風險。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.