web.config中的session配置詳解
開啟某個應用程式的配置檔案Web.config後,我們會發現以下這段:
這一段就是配置應用程式是如何儲存session資訊的了。我們以下的各種操作主要是針對這一段配置展開。讓我們先看看這一段配置中所包含的內容的意思。sessionState節點的語法是這樣的:
必須有的屬性是:屬性選項描述
mode 設定將session資訊儲存到哪裡。
? Off 設定為不使用session功能。
? InProc 設定為將session儲存在程式內,就是asp中的儲存方式,這是預設值。
? StateServer 設定為將session儲存在獨立的狀態服務中。
? SQLServer 設定將session儲存在sql server中。
可選的屬性是:屬性選項描述
? cookieless 設定客戶端的session資訊儲存到哪裡,
? ture 使用Cookieless模式,
? false 使用Cookie模式,這是預設值,
? timeout 設定經過多少分鐘後伺服器自動放棄session資訊,預設為20分鐘。
stateConnectionString 設定將session資訊儲存在狀態服務中時使用的伺服器名稱和埠號,例如:"tcpip=127.0.0.1:42424”。當mode的值是StateServer是,這個屬性是必需的。
sqlConnectionString 設定與sql server連線時的連線字串。例如"data source= localhost;Integrated Security=SSPI;Initial Catalog=northwind"。當mode的值是 SQLServer時,這個屬性是必需的。
stateNetworkTimeout 設定當使用StateServer模式儲存session狀態時,經過多少秒空閒後,斷開Web伺服器與儲存狀態資訊的伺服器的tcp/IP連線的。預設值是10秒鐘。
這個SessionState.aspx的頁面可以用來測試在當前的伺服器上是否丟失了session資訊。
將伺服器session資訊儲存在程式中
讓我們來回到Web.config檔案的剛才那段段落中:
當mode的值是InProc時,說明伺服器正在使用這種模式。
這種方式和以前asp中的模式一樣,就是伺服器將session資訊儲存在IIS程式中。當IIS關閉、重起後,這些資訊都會丟失。但是這種模式也有自己最大好處,就是效能最高。應為所有的session資訊都儲存在了IIS的程式中,所以IIS能夠很快的訪問到這些資訊,這種模式的效能比程式外儲存session資訊或是在sql server中儲存session資訊都要快上很多。這種模式也是asp.NET的預設方式。
好了,現在讓我們做個試驗。開啟剛才的SessionState.aspx頁面,隨便輸入一些字元,使其儲存在session中。然後,讓我們讓IIS重起。注意,並不是使當前的站點停止再開始,而是在IIS中本機的機器名的節點上點選滑鼠右鍵,選擇重新啟動IIS。返回到SessionState.aspx頁面中,檢查剛才的session資訊,發現資訊已經丟失了。
將伺服器session資訊儲存在程式外
首先,讓我們來開啟管理工具->服務,找到名為:asp.NET State Service的服務,啟動它。實際上,這個服務就是啟動一個要儲存session資訊的程式。啟動這個服務後,你可以從Windows工作管理員->程式中看到一個名為 aspnet_state.exe的程式,這個就是我們儲存session資訊的程式。
然後,回到Web.config檔案中上述的段落中,將mode的值改為StateServer。儲存檔案後的重新開啟一個IE,開啟 SessionState.aspx頁面,儲存一些資訊到session中。這時,讓我們重起IIS,再回到SessionState.aspx頁面中檢視剛才的session資訊,發現沒有丟失。
實際上,這種將session資訊儲存在程式外的方式不光指可以將資訊儲存在本機的程式外,還可以將session資訊儲存在其他的伺服器的程式中。這時,不光需要將mode的值改為StateServer,還需要在stateConnectionString中配置相應的引數。例如你的計算你是192.168.0.1,你想把session儲存在ip為192.168.0.2的計算機的程式中,就需要設定成這樣: stateConnectionString="tcpip=192.168.0.2:42424"。當然,不要忘記在192.168.0.2的計算機中裝上.NET Framework,並且啟動asp.NET State Services服務。
將伺服器session資訊儲存在sql server中
首先,還是讓我們來做一些準備工作。啟動sql server和sql server代理服務。在sql server中執行一個叫做 InstallSqlState.sql的指令碼檔案。這個指令碼檔案將在sql server中建立一個用來專門儲存session資訊的資料庫,及一個維護session資訊資料庫的sql server代理作業。我們可以在以下路徑中找到那個檔案:
[system drive]/winnt/Microsoft.NET/Framework/[version]/
然後開啟查詢分析器,連線到sql server伺服器,開啟剛才的那個檔案並且執行。稍等片刻,資料庫及作業就建立好了。這時,你可以開啟企業管理器,看到新增了一個叫ASPState的資料庫。但是這個資料庫中只是些儲存過程,沒有使用者表。實際上session資訊是儲存在了tempdb 資料庫的ASPStateTempSessions表中的,另外一個ASPStateTempApplications表儲存了asp中 application物件資訊。這兩個表也是剛才的那個指令碼建立的。另外檢視管理->SQL server代理->作業,發現也多了一個叫做ASPState_Job_DeleteExpiredSessions的作業,這個作業實際上就是每分鐘去ASPStateTempSessions 表中刪除過期的session資訊的。
接著,我們返回到Web.config檔案,修改mode的值改為SQLServer。注意,還要同時修改sqlConnectionString的值,格式為:
sqlConnectionString="data source=localhost; Integrated Security=SSPI;"
其中data source是指sql server伺服器的ip地址,如果sql server與IIS是一臺機子,寫127.0.0.1 就行了。Integrated Security=SSPI的意思是使用Windows整合身份驗證,這樣,訪問資料庫將以asp.NET的身份進行,通過如此配置,能夠獲得比使用userid=sa;password=口令的sql server驗證方式更好的安全性。當然,如果sql server執行於另一臺計算機上,你可能會需要通過Active Directory域的方式來維護兩邊驗證的一致性。
同樣,讓我們做個試驗。向SessionState.aspx中新增session資訊,這時發現session資訊已經存在 sql server中了,即使你重起計算機,剛才的session資訊也不會丟失。現在,你已經完全看見了session資訊到底是什麼樣子的了,而且又是儲存在sql server中的,能幹什麼就看你的發揮了。
asp.NET中客戶端session狀態的儲存
在我們上面的session模型簡介中,大家可以發現session狀態應該儲存在兩個地方,分別是客戶端和伺服器端。客戶端只負責儲存相應網站的SessionID,而其他的session資訊則儲存在伺服器端。在asp中,客戶端的SessionID實際是以Cookie的形式儲存的。如果使用者在瀏覽器的設定中選擇了禁用Cookie,那末他也就無法享受session的便利之處了,甚至造成不能訪問某些網站。為了解決以上問題,在 asp.NET中客戶端的session資訊儲存方式分為:Cookie和Cookieless兩種。
asp.NET中,預設狀態下,在客戶端還是使用Cookie儲存session資訊的。如果我們想在客戶端使用Cookieless的方式儲存session資訊的方法如下:
找到當前Web應用程式的根目錄,開啟Web.Config檔案,找到如下段落:
這段話中的cookieless="false"改為:cookieless="true",這樣,客戶端的session資訊就不再使用 Cookie儲存了,而是將其通過URL儲存。關閉當前的IE,開啟一個新IE,重新訪問剛才的Web應用程式,就會看到類似下面的樣子:
http://localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245) /default.aspx其中,中粗體標出的就是客戶端的session ID。注意,這段資訊是由IIS自動加上的,不會影響以前正常的連線。
asp.NET中伺服器端session狀態的儲存準備工作:
為了您能更好的體驗到實驗現象,您可以建立一個叫做SessionState.aspx的頁面,然後把以下這些程式碼新增到< body>< /body>中。
這個SessionState.aspx的頁面可以用來測試在當前的伺服器上是否丟失了session資訊。
將伺服器session資訊儲存在程式中
讓我們來回到Web.config檔案的剛才那段段落中:
當mode的值是InProc時,說明伺服器正在使用這種模式。
這種方式和以前asp中的模式一樣,就是伺服器將session資訊儲存在IIS程式中。當IIS關閉、重起後,這些資訊都會丟失。但是這種模式也有自己最大好處,就是效能最高。應為所有的session資訊都儲存在了IIS的程式中,所以IIS能夠很快的訪問到這些資訊,這種模式的效能比程式外儲存session資訊或是在sql server中儲存session資訊都要快上很多。這種模式也是asp.NET的預設方式。
好了,現在讓我們做個試驗。開啟剛才的SessionState.aspx頁面,隨便輸入一些字元,使其儲存在session中。然後,讓我們讓IIS重起。注意,並不是使當前的站點停止再開始,而是在IIS中本機的機器名的節點上點選滑鼠右鍵,選擇重新啟動IIS。返回到SessionState.aspx頁面中,檢查剛才的session資訊,發現資訊已經丟失了。
將伺服器session資訊儲存在程式外
首先,讓我們來開啟管理工具->服務,找到名為:asp.NET State Service的服務,啟動它。實際上,這個服務就是啟動一個要儲存session資訊的程式。啟動這個服務後,你可以從Windows工作管理員->程式中看到一個名為 aspnet_state.exe的程式,這個就是我們儲存session資訊的程式。
然後,回到Web.config檔案中上述的段落中,將mode的值改為StateServer。儲存檔案後的重新開啟一個IE,開啟 SessionState.aspx頁面,儲存一些資訊到session中。這時,讓我們重起IIS,再回到SessionState.aspx頁面中檢視剛才的session資訊,發現沒有丟失。
實際上,這種將session資訊儲存在程式外的方式不光指可以將資訊儲存在本機的程式外,還可以將session資訊儲存在其他的伺服器的程式中。這時,不光需要將mode的值改為StateServer,還需要在stateConnectionString中配置相應的引數。例如你的計算你是192.168.0.1,你想把session儲存在ip為192.168.0.2的計算機的程式中,就需要設定成這樣: stateConnectionString="tcpip=192.168.0.2:42424"。當然,不要忘記在192.168.0.2的計算機中裝上.NET Framework,並且啟動asp.NET State Services服務。
將伺服器session資訊儲存在sql server中
首先,還是讓我們來做一些準備工作。啟動sql server和sql server代理服務。在sql server中執行一個叫做 InstallSqlState.sql的指令碼檔案。這個指令碼檔案將在sql server中建立一個用來專門儲存session資訊的資料庫,及一個維護session資訊資料庫的sql server代理作業。我們可以在以下路徑中找到那個檔案:
[system drive]/winnt/Microsoft.NET/Framework/[version]/
然後開啟查詢分析器,連線到sql server伺服器,開啟剛才的那個檔案並且執行。稍等片刻,資料庫及作業就建立好了。這時,你可以開啟企業管理器,看到新增了一個叫ASPState的資料庫。但是這個資料庫中只是些儲存過程,沒有使用者表。實際上session資訊是儲存在了tempdb 資料庫的ASPStateTempSessions表中的,另外一個ASPStateTempApplications表儲存了asp中 application物件資訊。這兩個表也是剛才的那個指令碼建立的。另外檢視管理->SQL server代理->作業,發現也多了一個叫做ASPState_Job_DeleteExpiredSessions的作業,這個作業實際上就是每分鐘去ASPStateTempSessions 表中刪除過期的session資訊的。
接著,我們返回到Web.config檔案,修改mode的值改為SQLServer。注意,還要同時修改sqlConnectionString的值,格式為:
sqlConnectionString="data source=localhost; Integrated Security=SSPI;"
其中data source是指sql server伺服器的ip地址,如果sql server與IIS是一臺機子,寫127.0.0.1 就行了。Integrated Security=SSPI的意思是使用Windows整合身份驗證,這樣,訪問資料庫將以asp.NET的身份進行,通過如此配置,能夠獲得比使用userid=sa;password=口令的sql server驗證方式更好的安全性。當然,如果sql server執行於另一臺計算機上,你可能會需要通過Active Directory域的方式來維護兩邊驗證的一致性。
同樣,讓我們做個試驗。向SessionState.aspx中新增session資訊,這時發現session資訊已經存在 sql server中了,即使你重起計算機,剛才的session資訊也不會丟失。現在,你已經完全看見了session資訊到底是什麼樣子的了,而且又是儲存在sql server中的,能幹什麼就看你的發揮了。
相關文章
- WCF中的web.config配置檔案Web
- oracle中的processes,session,transaction引數詳解OracleSession
- php中Session使用方法詳解PHPSession
- Session詳解Session
- cookie和session的詳解CookieSession
- Cookie & Session詳解CookieSession
- v$Session詳解Session
- .net Session 詳解Session
- Django中的session常見配置DjangoSession
- Tomcat中session詳解(原始碼閱讀)TomcatSession原始碼
- Livy Session 詳解(上)Session
- Cookie與Session詳解CookieSession
- Session機制詳解Session
- http協議/cookie詳解/session詳解HTTP協議CookieSession
- cookie 和session 的區別詳解CookieSession
- Cookie和Session的區別詳解CookieSession
- SESSION_CACHED_CURSORS詳解Session
- Cookie,Session Filter,Listener詳解CookieSessionFilter
- Spring Boot中的配置管理詳解Spring Boot
- PHP中php.ini配置詳解PHP
- cookie和session的詳解與區別CookieSession
- cookie和session的超詳解(配圖)CookieSession
- asp.net夜話之十一:web.config詳解ASP.NETWeb
- Apache的配置詳解Apache
- 詳解nginx伺服器中的安全配置的方法Nginx伺服器
- web.config sqlserver 配置 設定WebSQLServer
- Spring Cloud中Feign配置詳解SpringCloud
- Asp.net web.config customErrors設定詳解ASP.NETWebError
- cookie與session的區別(圖文詳解)CookieSession
- 在Web.config或App.config中的新增自定義配置WebAPP
- Spring中的Environment外部化配置管理詳解Spring
- 詳解cookie、session和HTTP快取CookieSessionHTTP快取
- Struts2中 Result型別配置詳解型別
- redis配置檔案中各引數詳解Redis
- nginx + tomcat 叢集配置詳解, 實現負載均衡 URLRewrite Session複製NginxTomcat負載Session
- hibernate的事務管理和session物件的詳解Session物件
- laravel session 與 php session配置LaravelSessionPHP
- MyBatis 配置詳解MyBatis