成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET Session 狀態的存儲

開發 后端
本文介紹了asp.net中客戶端Session狀態的存儲和asp.net中服務器端Session狀態的存儲。通過這篇文章,你可以看到在asp.net session的管理和維護上,asp.net比asp有了很大的進步。

asp.net中客戶端Session狀態的存儲

在我們上面的ASP.NET Session模型簡介中,大家可以發現Session狀態應該存儲在兩個地方,分別是客戶端和服務器端。客戶端只負責保存相應網站的SessionID,而其他的Session信息則保存在服務器端。在ASP中,客戶端的SessionID實際是以Cookie的形式存儲的。如果用戶在瀏覽器的設置中選擇了禁用Cookie,那末他也就無法享受Session的便利之處了,甚至造成不能訪問某些網站。為了解決以上問題,在asp.net中客戶端的Session信息存儲方式分為:Cookie和Cookieless兩種。

asp.net中,默認狀態下,在客戶端還是使用Cookie存儲Session信息的。如果我們想在客戶端使用Cookieless的方式存儲Session信息的方法如下:

找到當前Web應用程序的根目錄,打開Web.Config文件,找到如下段落:

  1. < sessionState  
  2.   mode="InProc" 
  3.   stateConnectionString="tcpip=127.0.0.1:42424" 
  4.   sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" 
  5.   cookieless="false" 
  6.   timeout="20"   
  7. />   
  8.  

這段話中的cookieless="false"改為:cookieless="true",這樣,客戶端的Session信息就不再使用Cookie存儲了,而是將其通過URL存儲。關閉當前的IE,打開一個新IE,重新訪問剛才的Web應用程序,就會看到類似下面的樣子:

重新訪問剛才的Web應用程序 

其中,http://localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245)/default.aspx中黑體標出的就是客戶端的Session ID。注意,這段信息是由IIS自動加上的,不會影響以前正常的連接。

asp.net中服務器端Session狀態的存儲

準備工作

為了您能更好的體驗到實驗現象,您可以建立一個叫做SessionState.aspx的頁面,然后把以下這些代碼添加到< body>< /body>中。

  1. < scriptrunat="server">  
  2. Sub Session_Add(sender As Object, e As EventArgs)  
  3.   Session("MySession") = text1.Value  
  4.   span1.InnerHtml = "Session data updated! < P>Your session contains: < font color=red>" & \  
  5.            Session("MySession").ToString() & "< /font>" 
  6. End Sub  
  7.  
  8. Sub CheckSession(sender As Object, eAs EventArgs)  
  9.   If (Session("MySession")Is Nothing) Then  
  10.     span1.InnerHtml = "NOTHING, SESSION DATA LOST!" 
  11.   Else  
  12.     span1.InnerHtml = "Your session contains: < font color=red>" & \  
  13.              Session("MySession").ToString() & "< /font>" 
  14. End If  
  15. End Sub  
  16. < /script>  
  17. < formrunat="server"id="Form2">  
  18.   < inputid="text1"type="text"runat="server"name="text1">  
  19.   < inputtype="submit"runat="server"OnServerClick="Session_Add" 
  20.       value="Add to Session State" id="Submit1"name="Submit1">  
  21.   < inputtype="submit"runat="server"OnServerClick="CheckSession" 
  22.       value="View Session State" id="Submit2"name="Submit2">  
  23. < /form>  
  24. < hrsize="1">  
  25. < fontsize="6">< spanid="span1"runat="server" />< /font>  
  26.  

這個SessionState.aspx的頁面可以用來測試在當前的服務器上是否丟失了Session信息。

將服務器Session信息存儲在進程中

讓我們來回到Web.config文件的剛才那段段落中:

  1. < sessionState  
  2.   mode="InProc" 
  3.   stateConnectionString="tcpip=127.0.0.1:42424" 
  4.   sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" 
  5.   cookieless="false" 
  6.   timeout="20"   
  7. />   
  8.  

當mode的值是InProc時,說明服務器正在使用這種模式。

這種方式和以前ASP中的模式一樣,就是服務器將Session信息存儲在IIS進程中。當IIS關閉、重起后,這些信息都會丟失。但是這種模式也有自己***好處,就是性能***。應為所有的Session信息都存儲在了IIS的進程中,所以IIS能夠很快的訪問到這些信息,這種模式的性能比進程外存儲Session信息或是在SQL Server中存儲Session信息都要快上很多。這種模式也是asp.net的默認方式。

好了,現在讓我們做個試驗。打開剛才的SessionState.aspx頁面,隨便輸入一些字符,使其存儲在Session中。然后,讓我們讓IIS重起。注意,并不是使當前的站點停止再開始,而是在IIS中本機的機器名的節點上點擊鼠標右鍵,選擇重新啟動IIS。(想當初使用NT4時,重新啟動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信息,發現沒有丟失。

實際上,這種將ASP.NET 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的值,格式為:

  1. 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的管理和維護上,asp.net比asp有了很大的進步,我們可以更加隨意的挑選適合的方法了。

【編輯推薦】

  1. ASP.NET Session 模型簡述
  2. ASP.NET頁生命周期介紹:階段,事件及其他
  3. ASP.NET MVC生命周期介紹
  4. 處理ASP.NET Session失效的幾個方法
  5. ASP.NET:所有實例共享一個static變量

 

責任編輯:book05 來源: hi.baidu
相關推薦

2009-07-20 17:21:43

Session狀態ASP.NET

2009-07-30 14:03:04

ASP.NET中的se

2009-07-29 10:19:48

Session StaASP.NET

2009-07-28 16:57:50

ASP.NET Ses

2009-08-03 10:07:20

ASP.NET Ses

2009-07-23 18:56:50

ASP.NET Ses

2009-07-24 10:41:00

ASP.NET Ses

2009-08-05 18:30:36

Session和CooASP.NET表單

2009-07-28 11:09:02

ASP.NET狀態類型

2009-07-28 16:03:23

ASP.NET狀態服務

2009-07-22 18:02:26

ASP.NET Ses

2014-09-28 09:53:42

ASP.NETSQL Server

2009-07-23 16:28:55

2009-08-03 09:45:14

ASP.NET Ses

2009-08-05 17:39:13

ASP.NET常用狀態

2009-04-27 10:33:16

ASP.NET視圖狀態

2009-08-03 09:17:30

ASP.NET Ses

2009-07-22 17:45:35

ASP.NET教程

2009-08-03 14:22:33

什么是ASP.NET

2009-07-28 17:17:19

ASP.NET概述
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久草免费在线 | 亚洲一区 中文字幕 | 天天亚洲 | 成年人在线观看 | 亚洲欧洲小视频 | 日韩在线视频免费观看 | 区一区二在线观看 | 亚洲一区视频在线 | 日韩在线视频免费观看 | av中文网 | 精品久久久一区 | 亚洲视频在线一区 | 久久aⅴ乱码一区二区三区 91综合网 | 人人看人人草 | 精品美女视频在免费观看 | 国产欧美一区二区精品忘忧草 | 精品国产三级 | 精品国产乱码久久久久久老虎 | 欧美videosex性极品hd | 曰批视频在线观看 | 国产精品视频一区二区三区四区国 | 精品动漫一区 | 国产免费一级片 | 日本xx视频免费观看 | 亚洲精品乱码久久久久久按摩 | 人人干人人看 | 一级黄色裸片 | 亚洲一区二区三区在线 | 欧美日韩看片 | 久久久免费少妇高潮毛片 | 国产91精品久久久久久久网曝门 | 色综合视频 | 国产精品久久久久久久久久 | 日韩精品福利 | 色天堂影院 | 一区二区福利视频 | 精品久久久精品 | 日韩成人专区 | 99久久久久久99国产精品免 | 国产日韩精品一区二区 | 国产在线观 |