淺談Asp.net的sessionState

來源:互聯網
上載者:User


Three Session State providers :

  • InProcSessionStateStore, which stores session state in memory in the ASP.NET worker process
  • OutOfProcSessionStateStore, which stores session state in memory in an external state server process
  • SqlSessionStateStore, which stores session state in Microsoft SQL Server and Microsoft SQL Server Express databases

sessionState節點的配置

web.config關於sessionState節點的配置方案,sessionState有四種模式:off,inProc,StateServer,SqlServer。

 

1、off模式

從字面上就可以看出這個是關閉模式,如果當前頁面不需要session的值,為了減少伺服器資源,你可以去掉Session的開銷。

<sessionState mode="off">或者頁面上

<%@ Page EnableSessionState="false" %>來關閉Session。

 

2、inProc模式(預設模式)

它允許“無Cookie”的會話,以及在伺服器之外儲存
會話資料。ASP.NET工作階段狀態模組在Web.config檔案中像下面這樣配置:

<sessionState mode="InProc" cookieless="false" timeout="20" />

在這個例子中,mode屬性設為InProc(預設值),表明工作階段狀態要由ASP.NET儲存到記憶體中,而且
不用Cookie來傳遞會話ID。採取這種方式,不管Cookie還是隱藏表單欄位都用不著了。
所以,即使網頁中沒有使用表單,也能加入會話。 但是這種方法,應用程式的狀態將依賴於 ASP.NET進程, 當IIS進程崩潰或者正常重啟時,儲存在
進程中的狀態將丟失。

 

3、StateServer會話管理mos

將mode屬性設為StateServer,也就是將會話資料存放區到單獨的記憶體緩衝區中,再由單獨一台機器上運行

的Windows服務來控制這個緩衝區。狀態服務全稱是“ASP.NET State Service ”(aspnet_state.exe),電腦管理-服務 裡面即可看到此服務,啟動該服務j

它由Web.config檔案中的stateConnectionString屬性來配置。該屬性指定了服務所在的伺服器,以及要監

視的連接埠:
<sessionState mode="StateServer"
    stateConnectionString="tcpip=myserver:42424"
    cookieless="false" timeout="20" />
  
在這個例子中,狀態服務在一台名為myserver的機器的42424連接埠(預設連接埠)運行。要在伺服器上改變

連接埠,可編輯HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters登錄機碼中的Port值。

顯然,使用狀態服務的優點在於進程隔離,並可在Web farm(網站群)中共用。 使用這種模式,工作階段狀態的儲存將不

依賴於iis進程的失敗或者重啟,然而,一旦狀態服務中止,所有會話資料都會丟失。換言之,狀態服務不

像SQL Server那樣能持久儲存資料;它只是將資料存放區在記憶體中。

 

4 用SQL Server進行會話管理

   ASP.NET還允許將會話資料存放區到一個資料庫伺服器中,方法是將mode屬性變成SqlServer。
在這種情況下,ASP.NET嘗試將會話資料存放區到由sqlConnectionString屬性(其中包含資料來源以及登入服

務器所需的安全憑證)指定的SQL Server中。

為了用恰當的資料庫物件來配置SQL erver,管理員還需要建立ASPState資料庫,
方法是運行WinDir\Microsoft.Net\Framework\Version檔案夾中的InstallSqlState.sql指令碼(WinDir是服務

器的Windows檔案夾,而Version是你使用的.NET架構版本的安裝資料夾)。

要配置SQL伺服器,可以在命令列中運行SQL Server 提供的命令列工具osql.exe

osql -S [ server name] -U [user] -P [password] -i InstallSqlState.sql
例如
osql -S (local)\NetSDK -U sa -P "" -i InstallSqlState.sql

 

在這裡使用者名稱必須是SQL伺服器上的sa帳號,或者具有同等許可權的其他帳號。有興趣的讀者可以開啟
這個指令檔來瞭解ASP.NET是如何和SQL Server配合實現狀態管理的。  

   卸載這些表和預存程序,可以使用UninstallSqlState.sql指令碼,使用方法與上面類似。做好必要的資料庫準備工作後,將web.config 檔案中的sessionstate 元素的mode改為"sqlserver"
,並且指定SQL連接字串。具體如下:

mode="sqlserver"
sqlConnectionString="data source=127.0.0.1; userid=sa; password="

 

配置好SQL Server後,應用程式代碼運行時就和InProc模式沒有什麼區別。但要注意的是,由於資料不儲存在本地記憶體,所以儲存工作階段狀態的對象需要進行序列化和還原序列化,以便通過網路傳給資料庫伺服器,以及從資料庫伺服器傳回。這當然會影響效能。通過在資料庫中儲存工作階段狀態,可分別針對擴充性及可靠性來有效地平衡效能。另外,可以利用SQL Server的叢集,使狀態儲存不依賴於單個的SQL Server, 這樣就可以為應用程式提供極大限度的可靠性。

參考: http://jhxk.javaeye.com/blog/440275

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.