session的儲存方式和設定檔

來源:互聯網
上載者:User
   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狀態服務進程中,該進程獨立於Asp.Net輔助進程或IIS應用程式集區的單獨進程,使用此模式可以確保在重新啟動Web應用程式時保留工作階段狀態,並使工作階段狀態可以用於網路中的多個Web伺服器。

  1.3.儲存在SQL Server資料庫中

  可以配置把Session資料存放區到SQL Server資料庫中,為了進行這樣的配置,程式員首先需要準備SQL Server資料服務器,然後在運行.NET內建安裝工具安裝狀態資料庫。

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

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

InProc

StateServer

SQLServer

儲存物理位置

IIS進程(記憶體)

Windows服務進程(記憶體)

SQLServer資料庫(磁碟)

儲存類型限制

無限制

可以序列化的類型

可以序列化的類型

儲存大小限制

無限制

使用範圍

當前請求上下文,對於每個使用者獨立

生命週期

第一次訪問網站的時候建立Session逾時後銷毀

優點

效能比較高

Session不依賴Web伺服器,不容易丟失

缺點

容易丟失

序列化與還原序列化消耗CPU資源

序列化與還原序列化消耗CPU資源,從磁碟讀取Session比較慢

使用原則

不要存放大量資料

  2、在web.config中配置Session

  Web.config檔案中的Session配置資訊:

<sessionState mode=cookieless=timeout=stateConnectionString=sqlConnectionString=stateNetworkTimeout=/>

  mode 設定將Session資訊儲存到哪裡:

    — Off 設定為不使用Session功能;

    — InProc 設定為將Session儲存在進程內,就是ASP中的儲存方式,這是預設值;

    — StateServer 設定為將Session儲存在獨立的狀態服務中;

    — SQLServer 設定將Session儲存在SQL Server中。

  

  cookieless 設定用戶端的Session資訊儲存到哪裡:

    — ture 使用Cookieless模式;這時用戶端的Session資訊就不再使用Cookie儲存了,而是將其通過URL儲存。比如網址為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的方法

  2.1 StateServer

  第1步是開啟狀態服務。依次開啟“控制台”→“管理工具”→“服務”命令,找到ASP.NET狀態服務一項,按右鍵服務選擇啟動。

  如果你正式決定使用狀態服務儲存Session前,別忘記修改服務為自啟動(在作業系統重啟後服務能自己啟動)以免忘記啟動服務而造成網站Session不能使用

  第2步,在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]\winnt\Microsoft.NET\Framework\[version]\

然後開啟查詢分析器,串連到SQL Server伺服器,開啟剛才的那個檔案並且執行。稍等片刻,資料庫及作業就建立好了。這時,你可以開啟企業管理器,看到新增了一個叫ASPState的資料庫。

  修改mode的值改為SQLServer。注意,還要同時修改sqlConnectionString的值,格式為:sqlConnectionString="data source=localhost; Integrated Security=SSPI;"(這種是通過windows整合身分識別驗證)

  3、Session的生命週期

  Session的生命週期其實在第一節已經講過了,和不同的預存程序有關。

  4、遍曆以及銷毀Session

  4.1遍曆:

System.Collections.IEnumerator SessionEnum = Session.Keys.GetEnumerator(); (SessionEnum.MoveNext()){    Response.Write(Session[SessionEnum.Current.ToString()].ToString() +  );}

  4.2 銷毀:Session.Abandon()。

更多關於session的儲存方式和設定檔的教程,請關注php中文網!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.