首頁  >  文章  >  後端開發  >  session的儲存方式和設定文件

session的儲存方式和設定文件

PHPz
PHPz原創
2017-03-05 12:32:552500瀏覽

  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附安裝工具安裝狀態資料庫。

  這種方式在伺服器掛掉重啟後都還在,因為他儲存在記憶體和磁碟中。

  以下是這三種方式的比較:

Windows服務程序(記憶體)SQLServer資料庫(磁碟)第一次訪問網站的時候創建Session超時後銷毀優點性能比較高缺點序列化與反序列化消耗CPU資源,從磁碟讀取Session比較慢
 

InProc

實體位置

IIS進程(記憶體)

儲存類型限制

化的類型

儲存大小限制

無限制

使用範圍

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中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn