Session又稱為會話狀態,是Web系統中最常用的狀態,用於維護和當前瀏覽器實例相關的一些資訊。我們控制使用者去權限中常用到Session來儲存使用者狀態,這篇文章會講下Session的儲存方式、在web.config中如何設定Session、Session的生命週期等內容。
1、Session的儲存方式。
session其實分為客戶端Session和伺服器端Session。
當使用者首次與Web伺服器建立連線的時候,伺服器會為使用者分發一個 SessionID作為識別。 SessionID是一個由24個字元組成的隨機字串。使用者每次提交頁面,瀏覽器都會把這個SessionID包含在 HTTP頭中提交給Web伺服器,這樣Web伺服器就能區分目前請求頁面的是哪一個客戶端。這個SessionID就是保存在客戶端的,屬於客戶端Session。
其實客戶端Session預設是以cookie的形式來儲存的,所以當使用者停用了cookie的話,伺服器端就不會得到SessionID。這時我們可以使用url的方式來儲存客戶端Session。也就是將SessionID直接寫在了url中,當然這種方法不常用。
我們大多數提到的Session都是指伺服器端Session。他有三種儲存方式(自訂儲存在這裡不做討論):
1.1保存在IIS進程中:
保存在IIS進程中是指把Session資料保存在IIS的運行的進程中,也就是inetinfo.exe這個進程中,這也是預設的Session的存方式,也是最常用的。
這種方式的優點是簡單,效能最高。但是當重啟IIS伺服器時Session遺失。
1.2.保存在StateServer上
這種儲存模式是指將Session資料儲存在一個稱為Asp.Net狀態服務進程中,該進程獨立於這個進程的單獨進程,使用此模式可確保在重新啟動Web應用程式時保留會話狀態,並使會話狀態可以用於網路中的多個Web伺服器。
1.3.保存在SQL Server資料庫中
可以配置把Session資料儲存到SQL Server資料庫中,為了進行這樣的配置,程式設計師首先需要準備SQL Server資料伺服器,然後在執行.NETNET附安裝工具安裝狀態資料庫。
這種方式在伺服器掛掉重啟後都還在,因為他儲存在記憶體和磁碟中。
以下是這三種方式的比較:
InProc |
實體位置 |
IIS進程(記憶體) | |
SQLServer資料庫(磁碟) | 儲存類型限制 |
化的類型 | |
儲存大小限制 | 無限制 | 使用範圍 | 第一次訪問網站的時候創建Session超時後銷毀 |
優點 | 性能比較高 | ||
Session不依賴Web服務器,不容易丟失 |
缺點 | ||
容易丟失 |
序列化與反序列化消耗CPU資源 |
||
|
2、在web.config中設定Session Web.config檔中的Session設定資訊: . — Off 設定為不使用Session功能; — InProc 設定為將Session儲存於進程內,即ASP中的儲存方式,這是預設值; —SQL〠Server 服務設定為獨立的狀態服務設定為獨立的狀態;將Session儲存在SQL Server中。 cookieless 設定客戶端的Session資訊儲存到哪裡: — ture 使用Cookieless模式;這時客戶端的Session — ture 使用Cookieless模式;這時客戶端的Session — ture 使用Cookieless模式;這時客戶端的Session資訊就不再使用其儲存資訊,而是將其儲存了資訊,而是將例如網址為http://www.php.cn/(ulqsek45heu3ic2a5zgdl245)/default.aspx — false 使用Cookie模式,這是預設值。 timeout 設定經過多少分鐘後伺服器自動放棄Session資訊。預設為20分鐘。 stateConnectionString 設定將Session資訊儲存在狀態服務中時使用的伺服器名稱和連接埠號碼,例如:"tcpip=127.0.0.1:42424」。當mode的值是StateServer是,這個屬性是必要的。 (42424是預設連接埠)。 sqlConnectionString 設定與SQL Server連接時的連接字串。例如"data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind"。當mode的值是SQLServer時,這個屬性是必要的。 stateNetworkTimeout 設定當使用StateServer模式儲存Session狀態時,經過多少秒空閒後,斷開Web伺服器與儲存狀態資訊的伺服器的TCP/IP連接的。預設值是10秒鐘。
下面來說下用StateServer和SqlServer來儲存Session的方法 㟎 〜1依序開啟「控制台」→「管理工具」→「服務」指令,找到ASP.NET狀態服務一項,右鍵點選服務選擇啟動。如果你正式決定使用狀態服務存儲Session前,別忘記修改服務為自啟動(在操作系統重啟後服務能自己啟動)以免忘記啟動服務而造成網站Session不能使用 步,在system.web節點中加入:stateNetworkTimeout="20"> stateConnectionString表示狀態伺服器的通訊位址(IP:服務連接埠號碼)。由於我們現在在本機進行測試,這裡設定成本機位址127.0.0.1。狀態服務預設的監聽連接埠為42422。當然,您也可以透過修改登錄機碼來修改狀態服務的連接埠號碼。 (修改登錄機碼來修改狀態服務的連接埠號碼的方法:在執行中輸入regedit啟動登錄編輯器—依序開啟HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesaspnet_stateParameters節點,雙擊Port選項—選擇基數為十位,然後輸入一個埠號節點即可。 2.2 SqlServer 在SQL Server中執行一個叫做InstallSqlState.sql的腳本檔。這個腳本檔案將在SQL Server中建立一個用來專門儲存Session資訊的資料庫,以及一個維護Session資訊資料庫的SQL Server代理程式作業。我們可以在以下路徑中找到那個檔案:[system drive]winntMicrosoft.NETFramework[version] 然後開啟查詢分析器,連接到SQL Server伺服器,打開剛才的那個檔案並且執行。稍等片刻,資料庫及作業就建立好了。這時,你可以開啟企業管理器,看到新增了一個叫ASPState的資料庫。 修改mode的值改為SQLServer。注意,也要同時修改sqlConnectionString的值,格式為:sqlConnectionString="data source=localhost; Integrated Security=SSPI;"(這種是透過windows整合驗證) 〜3、Session的生命週期 〜3、Session的生命週期 〜3、Session的生命週期Session的生命週期其實在第一節已經講過了,跟不同的預存程序有關。
4、遍歷以及銷毀Session 4.1遍歷: . )。 更多關於session的儲存方式和設定檔的教學課程,請追蹤php中文網! |