原文:
[ASP.NET]配置使用SQL Server保存會話狀態(tài)
選擇“下一步”
選擇按圖中所示進行選擇,然后“下一步”
臨時數(shù)據(jù)庫中多了兩個用于保存會話狀態(tài)信息的表。
執(zhí)行之后,在數(shù)據(jù)庫中出現(xiàn)了新的數(shù)據(jù)庫ASPState。其中帶有的表跟之前在臨時數(shù)據(jù)庫中的一致。
會話狀態(tài)是ASP.NET應(yīng)用程序狀態(tài)的其中一種,這種狀態(tài)的特點是以用戶為單位,每個會話對應(yīng)一個用戶,也就是說在該用戶的整個訪問過程,會話狀態(tài)保存的數(shù)據(jù)都會持續(xù)保存于服務(wù)器的介質(zhì)中,直到會話超時(即用戶超過指定時間沒有存取會話數(shù)據(jù))。在服務(wù)器端保存會話狀態(tài)的方式有幾種,分別為:
?
1)
InProc
——這種方式會話狀態(tài)保存在ASP.NET運行進程內(nèi),具體位置就是ASP.NET的Cache(高速緩存)內(nèi)。
2)
StateServer
——這種方式會話狀態(tài)保存在ASP.NET所帶有的Wiindows服務(wù)進程中,該服務(wù)默認是禁用的,需要人手啟動。
3)
SQL Server
——這種方式會話狀態(tài)保存到SQL Server所管理的數(shù)據(jù)庫中。具體又可以分為保存在臨時數(shù)據(jù)庫,ASPState數(shù)據(jù)庫和自定義數(shù)據(jù)庫三種方式。
4)
自定義提供程序
——這種方式要求開發(fā)人員自己開發(fā)會話狀態(tài)的提供程序,會話狀態(tài)的存取方式完全由該提供程序決定,由此可以保存在其他SQL數(shù)據(jù)庫,或者XML文件,甚至文本文件中都可以。
?
本文目的在于說明怎樣配置使用SQL Server來保存會話狀態(tài)。
整個配置過程分為兩部分:
第一部分,在ASP.NET程序運行的服務(wù)器上,配置所使用的數(shù)據(jù)庫服務(wù)器。
第二部分,在ASP.NET程序的配置文件中修改會話狀態(tài)的保存方式。
?
配置所使用的數(shù)據(jù)庫服務(wù)器
:
1)運行aspnet_regsql.exe程序,該程序位于目錄C:\WINDOWS\Microsoft.NET\Framework\<ASP.NET版本號>下。首先雙擊運行該程序,為ASP.NET配置SQL Server。
![[ASP.NET]配置使用SQL Server保存會話狀態(tài)](http://img.it610.com/image/product/a1c735c1191d4daa98b145868abce081.jpg)
![[ASP.NET]配置使用SQL Server保存會話狀態(tài)](http://img.it610.com/image/product/813857678cc6494192c85b649740ae91.jpg)
![[ASP.NET]配置使用SQL Server保存會話狀態(tài)](http://img.it610.com/image/product/9711347782e5408f98f6c148d08e2c30.jpg)
填入與ASP.NET關(guān)聯(lián)的數(shù)據(jù)庫服務(wù)器信息,注意這里選擇的數(shù)據(jù)庫,在往后的ASP.NET應(yīng)用程序中是可以改變的。填入完成之后選擇“下一步”
之后還有兩個界面,不過在那兩個界面中只需要“下一步”,沒有可選擇的信息,所以這里不列出來了。
?
2)配置會話狀態(tài)使用的數(shù)據(jù)庫庫。
正如剛才所說,使用數(shù)據(jù)庫保存會話也分三種方式,臨時數(shù)據(jù)庫(SQL Server重啟后會丟失數(shù)據(jù))、ASPState數(shù)據(jù)庫和自定義數(shù)據(jù)庫。
注意 -ssadd, -E, -sstype 指令。
???
-ssadd
指令的功能是添加會話數(shù)據(jù)庫,默認是添加到臨時數(shù)據(jù)庫
???
-E
指令的功能是使用WINDOWS身份驗證,因為我演示的SQL Server在本機上,所以使用該指令才能連接,單獨的 -ssadd是運行不了的。
???
-sstype
?指令的功能是指定會話狀態(tài)使用哪個數(shù)據(jù)庫。隨后的參數(shù)有 t、p'和c?,分別為臨時數(shù)據(jù)庫,ASPState數(shù)據(jù)庫庫和自定義數(shù)據(jù)庫。
???
-d
的功能是在指定自定義數(shù)據(jù)庫的時候,指定該數(shù)據(jù)庫的名稱,以數(shù)據(jù)庫名稱做參數(shù)。
?
使用臨時數(shù)據(jù)庫保存會話狀態(tài)的指令
:
![[ASP.NET]配置使用SQL Server保存會話狀態(tài)](http://img.it610.com/image/product/5ab793827cc2497f9cf2161441167ad6.jpg)

?
使用ASPState數(shù)據(jù)庫保存會話狀態(tài)的指令
:
![[ASP.NET]配置使用SQL Server保存會話狀態(tài)](http://img.it610.com/image/product/c89d2dac1f8e4518afdffeeb0f71ec74.jpg)
![[ASP.NET]配置使用SQL Server保存會話狀態(tài)](http://img.it610.com/image/product/e6463197b4a841999d5d0c02a6cafbbb.jpg)
?
使用自定義數(shù)據(jù)庫TestCustom數(shù)據(jù)庫保存會話狀態(tài)的指令
:
![[ASP.NET]配置使用SQL Server保存會話狀態(tài)](http://img.it610.com/image/product/7950c0f5560642c8a84d36faae641e9c.jpg)
![[ASP.NET]配置使用SQL Server保存會話狀態(tài)](http://img.it610.com/image/product/492c2c58113146c6bf4e794151ea9911.jpg)
除了擁有上述的表之外,還帶有一系列自動添加上去的存儲過程,其實這些存儲過程不是自定義數(shù)據(jù)庫才特有的。無論使用哪種數(shù)據(jù)庫,都會有這些存儲過程,只是當從一種數(shù)據(jù)庫改到另一種數(shù)據(jù)庫的時候,表會留下來,但存儲過程就會全部轉(zhuǎn)移到新使用的數(shù)據(jù)庫中。
?
想要取消使用以上的設(shè)置,只需要-ssremove -E指令。
![[ASP.NET]配置使用SQL Server保存會話狀態(tài)](http://img.it610.com/image/product/d8337424cbb04590a736ef2a193035b6.jpg)
以上這些只能在本機的數(shù)據(jù)庫中創(chuàng)建會話數(shù)據(jù)庫,但正規(guī)的操作是不應(yīng)該在數(shù)據(jù)庫服務(wù)器上直接進行這些操作,很可能該服務(wù)器上根本沒有ASP.NET的組件。
因此我們需要從ASP.NET程序的部署服務(wù)器,通過遠程連接來進行配置,以下將演示這一實例,通過我的計算機連接到團隊成員的遠程計算機上。
?
要先說明,在CMD中運行aspnet_regsql.exe,要進行遠程連接,需要使用-S -U -P指令,分別指定:數(shù)據(jù)庫服務(wù)器名稱/地址、連接使用的帳號和密碼。
同時必須注明,要在SQL Server中配置會話數(shù)據(jù)庫,必須具有
創(chuàng)建表格,創(chuàng)建數(shù)據(jù)庫,創(chuàng)建存儲過程,和MSDB的RSExecRole角色權(quán)限
。否則配置過程一定會出錯。
![[ASP.NET]配置使用SQL Server保存會話狀態(tài)](http://img.it610.com/image/product/b82f73266fcf402caad1ef83967ab32f.jpg)
以上配置指令在 119.120.74.150的機器上,使用帳號密碼均為silin建立連接,然后創(chuàng)建一個自定義數(shù)據(jù)庫TestCustom來保存會話狀態(tài)。
?
以上就是關(guān)于ASP.NET使用SQL Server的配置。接下來是配置文件的修改。
?
修改ASP.NET程序的配置文件
:
?
在ASP.NET的配置文件中找到<sessionState>區(qū)段,很可能沒有這個區(qū)段,因為存在默認設(shè)置,這里假設(shè)沒有這個區(qū)段,重新寫入。
?
<sessionState mode="SQLServer" sqlConnectionString="所需連接字符串" /> 只需要這么簡單的設(shè)置。當然還有其他設(shè)置,但要起到作用,最少只需要這兩個屬性設(shè)置就OK了。
?
完成上述設(shè)置之后,在程序中的存取的會話數(shù)據(jù)就會自動保存到數(shù)據(jù)庫中,整個編碼過程沒有任何改動。ASP.NET的這個提供程序機制,的確把代碼實現(xiàn)跟數(shù)據(jù)保存方式分離了。不過要注意,當把會話狀態(tài)保存到ASP.NET運行進程以外的介質(zhì)時,必定會進行序列化和反序列化,因此必須注意會話狀態(tài)中保存的類型是否能夠進行序列化。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
