熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET Session 詳解

2013-11-13 09:46:29  來源: .NET編程 

  閱讀本文章前需要讀者對以下知識有所了解否則閱讀過程中會在相應的內容上遇到不同程度的問題

  懂得ASP/ASPNET編程
  了解ASP/ASPNET的Session模型
  了解ASPNET Web應用程序模型
  了解ASPNET Web應用程序配置文件nfig的作用意義及使用方法
  了解Internet Information Services(以下簡稱IIS)的基本使用方法
  了解如何在Microsoft SQL Server中創建一個數據庫

  Session模型簡介
  Session是什麼呢簡單來說就是服務器給客戶端的一個編號當一台WWW服務器運行時可能有若干個用戶浏覽正在運正在這台服務器上的網站當每個用戶首次與這台WWW服務器建立連接時他就與這個服務器建立了一個Session同時服務器會自動為其分配一個SessionID用以標識這個用戶的唯一身份這個SessionID是由WWW服務器隨機產生的一個由個字符組成的字符串我們會在下面的實驗中見到它的實際樣子

  這個唯一的SessionID是有很大的實際意義的當一個用戶提交了表單時浏覽器會將用戶的SessionID自動附加在HTTP頭信息中(這是浏覽器的自動功能用戶不會察覺到)當服務器處理完這個表單後將結果返回給SessionID所對應的用戶試想如果沒有SessionID當有兩個用戶同時進行注冊時服務器怎樣才能知道到底是哪個用戶提交了哪個表單呢當然SessionID還有很多其他的作用我們會在後面提及到

  除了SessionID在每個Session中還包含很多其他信息但是對於編寫ASP或ASPNET的程序與來說最有用的還是可以通過訪問ASP/ASPNET的內置Session對象為每個用戶存儲各自的信息例如我們想了解一下訪問我們網站的用戶浏覽了幾個頁面我們可能在用戶可能訪問到每個的頁面中加入

  <%
If Session(PageViewed) = Then
 Session(PageViewed) =
Else
 Session(PageViewed) = Session(PageViewed) +
End If
%>

  可能有些有些讀者會問這個看似像是數組的Session()是哪裡來的需要我定義嗎實際上這個Session對象是具有ASP解釋能力的的WWW服務器的內建對象也就是說ASP的系統中已經給你定義好了這個對象你只需要使用就行了其中Session()中的就好像變量名稱Session()=$$中的$$就是變量的值了你只需要寫上句話在這個用戶的每個頁面中都可以訪問變量中的值了

  其實ASP一共內建了個對象有SessionApplicationCookieResponseRequestServer等在其他的服務器端腳本語言如JSPPHP等中也有其類似的對象只是叫法或者使用方法上不太一樣

  ASP Session的功能的缺陷
  目前ASP的開發人員都正在使用Session這一強大的功能但是在他們使用的過程中卻發現了ASP Session有以下缺陷

  進程依賴性ASP Session狀態存於IIS的進程中也就是inetinfoexe這個程序所以當inetinfoexe進程崩潰時這些信息也就丟失另外重起或者關閉IIS服務都會造成信息的丟失
  Session狀態使用范圍的局限性剛一個用戶從一個網站訪問到另外一個網站時這些Session信息並不會隨之遷移過去例如新浪網站的WWW服務器可能不止一個一個用戶登錄之後要去各個頻道浏覽但是每個頻道都在不同的服務器上如果想在這些WWW服務器共享Session信息怎麼辦呢
Cookie的依賴性實際上客戶端的Session信息是存儲與Cookie中的如果客戶端完全禁用掉了Cookie功能他也就不能享受到了Session提供的功能了
鑒於ASP Session的以上缺陷微軟的設計者們在設計開發 ASPNET Session時進行了相應的改進完全克服了以上缺陷使得ASPNET Session成為了一個更加強大的功能

  nfig文件簡介
  有的ASPNET程序員說nfig文件我從來沒有聽說過啊可是我寫的程序不是也能很正常的運轉嗎是的你說得沒錯沒有nfig文件程序是可以正常運行的但是如果你做了一個大型的網站需要對整個網站做一些整體配置例如整個網站的頁面使用何種語言編寫的網站的安全認證模式Session信息存儲方式等這時你就需要使用nfig文件了雖然nfig文件中的某些選項是可以通過IIS配置的但是如果在nfig中也有相應的設置就會覆蓋掉IIS中的配置而且nfig文件的最大的便利之處就是可以在ASPNET頁面中通過調用Systemweb名字空間訪問nfig中的設置

  nfig有兩種分別是服務器配置文件和Web應用程序配置文件他們都名為nfig在這個配置文件中會保存當前IIS服務器中網頁的使用哪種語言編寫的應用程序安全認證模式Session信息存儲方式的一系列信息這些信息是使用XML語法保存的如果想對其編輯使用文本編輯器就行了

  其中服務器配置文件會對IIS服務器下所有的站點中的所有應用程序起作用

  在NET Framework 服務器的nfig文件是存在\WinNT\MicrosoftNET\Framework\v中的

  而Web應用程序配置文件nfig則保存在各個Web應用程序中例如當前網站的根目錄\Inetpub\wwwroot而當前的Web應用程序為MyApplication則Web應用程序根目錄就應為\Inetpub\wwwroot\MyApplication如果你的網站有且只有一個Web應用程序一般說來應用程序的根目錄就是\Inetpub\wwwroot如果想添加一個Web應用程序在IIS中添加一個具有應用程序起始點的虛擬目錄就行了這個目錄下的文件及目錄將被視為一個Web應用程序但是這樣通過IIS添加Web應用程序是不會為你生成nfig文件的如果想創建一個帶有nfig文件的Web應用程序需要使用Visual StudioNET新建一個Web應用程序項目

  Web應用程序的配置文件nfig是可選的可有可無如果沒有每個Web應用程序會使用服務器的nfig配置文件如果有則會覆蓋服務器nfig配置文件中相應的值

  在ASPNET中nfig修改保存後會自動立刻成效不用再像ASP中的配置文件修改後需要重新啟動Web應用程序才能生效了

  nfig文件中的Session配置信息
  打開某個應用程序的配置文件nfig後我們會發現以下這段

  <sessionState
  mode=InProc
  stateConnectionString=tcpip=:
  sqlConnectionString=data source=;Trusted_Connection=yes
  cookieless=false
  timeout=
/>

  這一段就是配置應用程序是如何存儲Session信息的了我們以下的各種操作主要是針對這一段配置展開讓我們先看看這一段配置中所包含的內容的意思sessionState節點的語法是這樣的

  <sessionState mode=Off|InProc|StateServer|SQLServer
cookieless=true|false
timeout=number of minutes
stateConnectionString=tcpip=server:port
sqlConnectionString=sql connection string
stateNetworkTimeout=number of seconds
/>


From:http://tw.wingwit.com/Article/program/net/201311/11552.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.