SessionState的幾種設定

2022-02-10 13:18:01 字數 2800 閱讀 9395

web form 網頁是基於http的,它們沒有狀態, 這意味著它們不知道所有的請求是否來自

同一臺客戶端計算機,網頁是受到了破壞,以及是否得到了重新整理,這樣就可能造成資訊的

丟失。 於是, 狀態管理就成了開發網路應用程式的乙個實實在在的問題。

在asp中能夠通過cookie 、查詢字串、 應用程式、會話(session) 等輕易解決這些問題。

現在在asp.net環境中,我們依然可以使用這些功能,並且功能更加強大。

狀態管理分為服務端和客戶端兩種情況, 這裡只是介紹 服務端狀態管理:

狀態伺服器服務和狀態資訊可以和web應用程式一起存在於同一臺伺服器上,也可以儲存到外部的

狀態伺服器上。 為了指定如何儲存資訊,程式設計師可以在web.config檔案中編寫適當的配置。

asp.net會話狀態模組在web.config檔案中標記下的標記的mode屬性來決定

該屬性的四種可能的值: off、 inproc stateserver 和sqlserver。

1 inproc是預設的設定

它允許「無cookie」的會話,以及在伺服器之外儲存

會話資料。asp.net會話狀態模組在web.config檔案中像下面這樣配置:

在這個例子中,mode屬性設為inproc(預設值),表明會話狀態要由asp.net儲存到記憶體中,而且

不用cookie來傳遞會話id。相反,會話id要直接插入乙個網頁url的查詢字串中。例如,採用

inproc模式並建立乙個會話之後,呼叫乙個假想的asp.net網頁時,需要採用下面這樣的url:

但是這種方法,應用程式的狀態將依賴於 asp.net程序,當iis程序崩潰或者正常重啟時,儲存在

程序中的狀態將丟失。

2 mode屬性設為off

和從前的asp一樣,asp.net的會話狀態管理是要產生開銷的。所以,假如某個網頁不需要訪問

session物件,開發者應將那個頁的page預編譯指令的enablesessionstate屬性設為false。

要為整個**禁用會話狀態,可在web.config檔案中將sessionstate元素的mode屬性設為off。

為了克服inproc 模式的缺點, asp.net 提供了兩種程序外儲存會話狀態的方法。

3 stateserver會話管理

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

的windows服務來控制這個緩衝區。狀態服務全稱是「asp.net state service 」(aspnet_state.exe),

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

視的埠:

在這個例子中,狀態服務在一台名為myserver的機器的42424埠(預設埠)執行。要在伺服器上改變

埠,可編輯hklm\system\currentcontrolset\services\aspnet_state登錄檔項中的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資料夾中的installstate.sql指令碼(windir是服務

器的windows資料夾,而version是你使用的.net框架版本的安裝資料夾)。

要配置sql伺服器,可以在命令列中執行sql server 提供的命令列工具osql.exe

osql -s [ server name] -u [user] -p [password] 在這裡使用者名稱必須是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,

這樣就可以為應用程式提供極大限度的可靠性。

sessionState的幾種設定

web.config 中sessionstate的配置 web form 網頁是基於http的,它們沒有狀態,這意味著它們不知道所有的請求是否來自 同一臺客戶端計算機,網頁是受到了破壞,以及是否得到了重新整理,這樣就可能造成資訊的 丟失。於是,狀態管理就成了開發網路應用程式的乙個實實在在的問題。在a...

IIS7 會話狀態 Session State

asp.net提供了5種會話狀態選項 inproc stateserver sqlserver custom off 1.inproc inproc選項支援在程序內儲存會話狀態,實際上是在w3wp.exe工作程序中儲存會話狀態。這意味著儲存會話狀態資料將分別儲存在每台伺服器中,因此其他伺服器無法訪問...

mysql幾種索引 mysql的幾種索引

為什麼建立索引後,速度就會變快?答 使用索引後,查詢是按二叉樹演算法來查詢到記錄 索引使用的注意事項 索引的代價 1.占用磁碟空間 2.對dml 新增 修改 刪除 操作有影響,變慢 在哪些列上適合新增索引 1.較頻繁的作為查詢條件字段應該建立索引 select from emp where empn...