會話狀態是ASP.NET應用程式狀態的其中一種,這種狀態的特點是以使用者為單位,每個會話對應一個使用者,也就是說在該使用者的整個訪問過程,會話狀態保存的資料都會持續保存于伺服器的介質中,直到會話超時(即使用者超過指定時間沒有存取會話資料)。在伺服器端保存會話狀態的方式有幾種,分別為:

 

1)InProc——這種方式會話狀態保存在ASP.NET運行進程內,具體位置就是ASP.NET的Cache(快取記憶體)內。
2)StateServer——這種方式會話狀態保存在ASP.NET所帶有的Wiindows服務進程中,該服務預設是禁用的,需要人手啟動。
3)SQL Server——這種方式會話狀態保存到SQL Server所管理的資料庫中。具體又可以分為保存在臨時資料庫,ASPState資料庫和自訂資料庫三種方式。
4)自訂提供程式——這種方式要求開發人員自己開發會話狀態的提供程式,會話狀態的存取方式完全由該提供程式決定,由此可以保存在其他SQL資料庫,或者XML檔,甚至文字檔中都可以。

 

本文目的在於說明怎樣配置使用SQL Server來保存會話狀態。
整個配置過程分為兩部分:
第一部分,在ASP.NET程式運行的伺服器上,配置所使用的資料庫伺服器。
第二部分,在ASP.NET程式的設定檔中修改會話狀態的保存方式。

 

配置所使用的資料庫伺服器:
1)運行aspnet_regsql.exe程式,該程式位於目錄C:\WINDOWS\Microsoft.NET\Framework\<ASP.NET版本號>下。首先按兩下運行該程式,為ASP.NET配置SQL Server。
選擇「下一步」
選擇按圖中所示進行選擇,然後「下一步」

 

填入與ASP.NET關聯的資料庫伺服器資訊,注意這裡選擇的資料庫,在往後的ASP.NET應用程式中是可以改變的。填入完成之後選擇「下一步」
之後還有兩個介面,不過在那兩個介面中只需要「下一步」,沒有可選擇的資訊,所以這裡不列出來了。

 

2)配置會話狀態使用的資料庫庫。
正如剛才所說,使用資料庫保存會話也分三種方式,臨時資料庫(SQL Server重啟後會遺失資料)、ASPState資料庫和自訂資料庫。
注意 -ssadd, -E, -sstype 指令。
-ssadd 指令的功能是添加會話資料庫,預設是添加到臨時資料庫
-E 指令的功能是使用WINDOWS身份驗證,因為我演示的SQL Server在本機上,所以使用該指令才能連接,單獨的 -ssadd是運行不了的。
-sstype 指令的功能是指定會話狀態使用哪個資料庫。隨後的參數有 t、p'和c ,分別為臨時資料庫,ASPState資料庫庫和自訂資料庫。
-d 的功能是在指定自訂資料庫的時候,指定該資料庫的名稱,以資料庫名稱做參數。

 

使用臨時資料庫保存會話狀態的指令:

 

臨時資料庫中多了兩個用於保存會話狀態資訊的表。

 

使用ASPState資料庫保存會話狀態的指令:

 

執行之後,在資料庫中出現了新的資料庫ASPState。其中帶有的表跟之前在臨時資料庫中的一致。

 

使用自訂資料庫TestCustom資料庫保存會話狀態的指令:



除了擁有上述的表之外,還帶有一系列自動添加上去的預存程序,其實這些預存程序不是自訂資料庫才特有的。無論使用哪種資料庫,都會有這些預存程序,只是當從一種資料庫改到另一種資料庫的時候,表會留下來,但預存程序就會所有來電到新使用的資料庫中。

 

想要取消使用以上的設置,只需要-ssremove -E指令。

 

以上這些只能在本機的資料庫中創建會話資料庫,但正規的操作是不應該在資料庫伺服器上直接進行這些操作,很可能該伺服器上根本沒有ASP.NET的元件。
因此我們需要從ASP.NET程式的部署伺服器,通過遠端連線來進行配置,以下將演示這一實例,通過我的電腦連接到團隊成員的遠端電腦上。

 

要先說明,在CMD中運行aspnet_regsql.exe,要進行遠端連線,需要使用-S -U -P指令,分別指定:資料庫伺服器名稱/位址、連接使用的帳號和密碼。
同時必須注明,要在SQL Server中配置會話資料庫,必須具有創建表格,創建資料庫,創建預存程序,和MSDB的RSExecRole角色許可權。否則配置過程一定會出錯。

 

以上配置指令在 119.120.74.150的機器上,使用帳號密碼均為silin建立連接,然後創建一個自訂資料庫TestCustom來保存會話狀態。

 

以上就是關於ASP.NET使用SQL Server的配置。接下來是設定檔的修改。

 

修改ASP.NET程式的設定檔:

 

在ASP.NET的設定檔中找到<sessionState>區段,很可能沒有這個區段,因為存在預設設置,這裡假設沒有這個區段,重新寫入。

 

<sessionState mode="SQLServer" sqlConnectionString="所需連接字串" /> 只需要這麼簡單的設置。當然還有其他設置,但要起到作用,最少只需要這兩個屬性設置就OK了。

 

完成上述設置之後,在程式中的存取的會話資料就會自動儲存到資料庫中,整個編碼過程沒有任何改動。ASP.NET的這個提供程式機制,的確把代碼實現跟資料保存方式分離了。不過要注意,當把會話狀態保存到ASP.NET運行進程以外的介質時,必定會進行序列化和反序列化,因此必須注意會話狀態中保存的類型是否能夠進行序列化。
創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()