一認識Webconfig文件
Webconfig 文件是一個XML文本文件它用來儲存 ASPNET Web 應用程序的配置信息(如最常用的設置ASPNET Web 應用程序的身份驗證方式)它可以出現在應用程序的每一個目錄中當你通過NET新建一個Web應用程序後默認情況下會在根目錄自動創建一個默認的Webconfig文件包括默認的配置設置所有的子目錄都繼承它的配置設置如果你想修改子目錄的配置設置你可以在該子目錄下新建一個Webconfig文件它可以提供除從父目錄繼承的配置信息以外的配置信息也可以重寫或修改父目錄中定義的設置
(一)WebConfig是以XML文件規范存儲配置文件分為以下格式
配置節處理程序聲明
特點 位於配置文件的頂部包含在<configSections>標志中
特定應用程序配置
特點: 位於<appSetting>中 可以定義應用程序的全局常量設置等信息
配置節設置
特點: 位於<systemWeb>節中控制Aspnet運行時的行為
配置節組
特點: 用<sectionGroup>標記可以自定義分組可以放到<configSections>內部或其它<sectionGroup>標記的內部
(二)配置節的每一節
<configuration>節
根元素其它節都是在它的內部
<appSetting>節
此節用於定義應用程序設置項對一些不確定設置還可以讓用戶根據自己實際情況自己設置
用法:
I
<appSettings>
<add key="Conntction" value="server=;userid=sa;password=;database=Info;"/>
<appSettings>
定義了一個連接字符串常量並且在實際應用時可以修改連接字符串不用修改程式代碼
II<appSettings>
<add key="ErrPage" value="Erroraspx"/>
<appSettings>
定義了一個錯誤重定向頁面
<compilation>節
格式:
<compilation
defaultLanguage="c#"
debug="true"
/>
Idefault language: 定義後台代碼語言可以選擇C#和VBnet兩種語言
IIdebug : 為true時啟動aspx調試為false不啟動aspx調試因而可以提高應用程序運行
時的性能 一般程序員在開發時設置為true交給客戶時設置為false
<customErrors>節
格式:
<customErrors
mode="RemoteOnly"
defaultRedirect="erroraspx"
<error statusCode="" redirect="errpageaspx"/>
<error statusCode="" redirect="errPageaspx"/>
/>
Imode : 具有OnOffRemoteOnly 種狀態On表示始終顯示自定義的信息; Off表示始終顯示詳細的aspnet錯誤信息; RemoteOnly表示只對不在本地Web服務器上運行的用戶顯示自定義信息
IIdefaultRedirect: 用於出現錯誤時重定向的URL地址 是可選的
IIIstatusCode: 指明錯誤狀態碼表明一種特定的出錯狀態
IV redirect:錯誤重定向的URL
<globalization>節
格式:
<globalization
requestEncoding="utf"
responseEncoding="utf"
fileEncoding="utf"
/>
IrequestEncoding: 它用來檢查每一個發來請求的編碼
IIresponseEncoding: 用於檢查發回的響應內容編碼
IIIfileEncoding: 用於檢查aspxasax等文件解析的默認編碼
<sessionState>節
格式:
<sessionState
mode="InProc"
stateConnectionString="tcpip=:"
sqlConnectionString="data source=;Trusted_Connection=yes"
cookieless="false"
timeout=""
/>
Imode: 分為offInprocStateServerSqlServer幾種狀態
這裡有詳細介紹此屬性:
II stateConnectionString :指定Aspnet應用程序存儲遠程會話狀態的服務器名默認為本機
IIIsqlConnectionString: 當用會話狀態數據庫時在這裡設置連接字符串
IV Cookieless: 設置為true時表示不使用cookie會話狀態來標識客戶否則相反
V TimeOut: 用來定義會話狀態存儲的時間超過期限將自動終止會話
<authentication>節
格式:
<authentication mode="Forms">
<forms name="ASPXUSERDEMO" loginUrl="Loginaspx" protection="All" timeout=""/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
IWindows: 使用IIS驗證方式
IIForms: 使用基於窗體的驗證方式
IIIPassport: 采用Passport cookie驗證模式
IVNone: 不采用任何驗證方式
裡面內嵌Forms節點的屬性涵義:
IName: 指定完成身份驗證的Http cookie的名稱
IILoginUrl: 如果未通過驗證或超時後重定向的頁面URL一般為登錄頁面讓用戶重新登錄
IIIProtection: 指定 cookie數據的保護方式
可設置為: All None Encryption Validation四種保護方式
a All表示加密數據並進行有效性驗證兩種方式
b None表示不保護Cookie
c Encryption表示對Cookie內容進行加密
d validation表示對Cookie內容進行有效性驗證
IV TimeOut: 指定Cookie的失效時間 超時後要重新登錄
在運行時對Webconfig文件的修改不需要重啟服務就可以生效(注<processModel> 節例外)當然Webconfig文件是可以擴展的你可以自定義新配置參數並編寫配置節處理程序以對它們進行處理
webconfig配置文件(默認的配置設置)以下所有的代碼都應該位於
<configuration>
<systemweb>
和
</systemweb>
</configuration>
之間出於學習的目的下面的示例都省略了這段XML標記
<authentication> 節
作用配置 ASPNET 身份驗證支持(為WindowsFormsPassPortNone四種)該元素只能在計算機站點或應用程序級別聲明< authentication> 元素必需與<authorization> 節配合使用
示例
以下示例為基於窗體(Forms)的身份驗證配置站點當沒有登陸的用戶訪問需要身份驗證的網頁網頁自動跳轉到登陸網頁
<authentication mode="Forms" >
<forms loginUrl="logonaspx" name="FormsAuthCookie"/>
</authentication>
其中元素loginUrl表示登陸網頁的名稱name表示Cookie名稱
<authorization> 節
作用控制對 URL 資源的客戶端訪問(如允許匿名用戶訪問)此元素可以在任何級別(計算機站點應用程序子目錄或頁)上聲明必需與<authentication> 節配合使用
示例以下示例禁止匿名用戶的訪問
<authorization>
<deny users="?"/>
</authorization>
注你可以使用useridentityname來獲取已經過驗證的當前的用戶名可以使用webSecurityFormsAuthenticationRedirectFromLoginPage方法將已驗證的用戶重定向到用戶剛才請求的頁面具體的
<compilation>節
作用配置 ASPNET 使用的所有編譯設置默認的debug屬性為“True”在程序編譯完成交付使用之後應將其設為False(Webconfig文件中有詳細說明此處省略示例)
<customErrors>
作用為 ASPNET 應用程序提供有關自定義錯誤信息的信息它不適用於 XML Web services 中發生的錯誤
示例當發生錯誤時將網頁跳轉到自定義的錯誤頁面
<customErrors defaultRedirect="ErrorPageaspx" mode="RemoteOnly">
</customErrors>
其中元素defaultRedirect表示自定義的錯誤網頁的名稱mode元素表示對不在本地 Web 服務器上運行的用戶顯示自定義(友好的)信息
<httpRuntime>節
作用配置 ASPNET HTTP 運行庫設置該節可以在計算機站點應用程序和子目錄級別聲明
示例控制用戶上傳文件最大為M最長時間為秒最多請求數為
<httpRuntime maxRequestLength="" executionTimeout="" appRequestQueueLimit=""/>
<pages>
作用標識特定於頁的配置設置(如是否啟用會話狀態視圖狀態是否檢測用戶的輸入等)<pages>可以在計算機站點應用程序和子目錄級別聲明
示例不檢測用戶在浏覽器輸入的內容中是否存在潛在的危險數據(注該項默認是檢測如果你使用了不檢測一要對用戶的輸入進行編碼或驗證)在從客戶端回發頁時將檢查加密的視圖狀態以驗證視圖狀態是否已在客戶端被篡改(注該項默認是不驗證)
<pages buffer="true" enableViewStateMac="true" validateRequest="false"/>
<sessionState>
作用為當前應用程序配置會話狀態設置(如設置是否啟用會話狀態會話狀態保存位置)
示例
<sessionState mode="InProc" cookieless="true" timeout=""/>
</sessionState>
注
mode="InProc"表示在本地儲存會話狀態(你也可以選擇儲存在遠程服務器或SAL服務器中或不啟用會話狀態)
cookieless="true"表示如果用戶浏覽器不支持Cookie時啟用會話狀態(默認為False)
timeout=""表示會話可以處於空閒狀態的分鐘數
<trace>
作用配置 ASPNET 跟蹤服務主要用來程序測試判斷哪裡出錯
示例以下為Webconfig中的默認配置
<trace enabled="false" requestLimit="" pageOutput="false" traceMode="SortByTime" localOnly="true" />
注
enabled="false"表示不啟用跟蹤
requestLimit=""表示指定在服務器上存儲的跟蹤請求的數目
pageOutput="false"表示只能通過跟蹤實用工具訪問跟蹤輸出
traceMode="SortByTime"表示以處理跟蹤的順序來顯示跟蹤信息
localOnly="true" 表示跟蹤查看器 (traceaxd) 只用於宿主 Web 服務器
自定義Webconfig文件配置
自定義Webconfig文件配置節過程分為兩步
在在配置文件頂部 <configSections> 和 </configSections>標記之間聲明配置節的名稱和處理該節中配置數據的 NET Framework 類的名稱
是在 <configSections> 區域之後為聲明的節做實際的配置設置
示例創建一個節存儲數據庫連接字符串
<configuration>
<configSections>
<section name="appSettings" type="SystemConfigurationNameValueFileSectionHandler System Version= Culture=neutral PublicKeyToken=bace"/>
</configSections>
<appSettings>
<add key="scon" value="server=a;database=northwind;uid=sa;pwd="/>
</appSettings>
<systemweb>
</systemweb>
</configuration>
訪問Webconfig文件 你可以通過使用ConfigurationSettingsAppSettings 靜態字符串集合來訪問 Webconfig 文件示例獲取上面例子中建立的連接字符串例如
protected static string Isdebug = ConfigurationSettingsAppSettings["debug"]
二webconfig中的session配置詳解
打開某個應用程序的配置文件Webconfig後我們會發現以下這段
< 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"
/>
必須有的屬性是 屬性 選項 描述
mode 設置將Session信息存儲到哪裡
Ø Off 設置為不使用Session功能
Ø InProc 設置為將Session存儲在進程內就是ASP中的存儲方式這是默認值
Ø StateServer 設置為將Session存儲在獨立的狀態服務中
Ø SQLServer 設置將Session存儲在SQL Server中
可選的屬性是 屬性 選項 描述
Ø cookieless 設置客戶端的Session信息存儲到哪裡
Ø ture 使用Cookieless模式
Ø false 使用Cookie模式這是默認值
Ø timeout 設置經過多少分鐘後服務器自動放棄Session信息默認為分鐘
stateConnectionString 設置將Session信息存儲在狀態服務中時使用的服務器名稱和端口號例如"tcpip=:”當mode的值是StateServer是這個屬性是必需的
sqlConnectionString 設置與SQL Server連接時的連接字符串例如"data source= localhost;Integrated Security=SSPI;Initial Catalog=northwind"當mode的值是 SQLServer時這個屬性是必需的
stateNetworkTimeout 設置當使用StateServer模式存儲Session狀態時經過多少秒空閒後斷開Web服務器與存儲狀態信息的服務器的TCP/IP連接的默認值是秒鐘
ASPNET中客戶端Session狀態的存儲
在我們上面的Session模型簡介中大家可以發現Session狀態應該存儲在兩個地方分別是客戶端和服務器端客戶端只負責保存相應網站的SessionID而其他的Session信息則保存在服務器端在ASP中客戶端的SessionID實際是以Cookie的形式存儲的如果用戶在浏覽器的設置中選擇了禁用Cookie那末他也就無法享受Session的便利之處了甚至造成不能訪問某些網站為了解決以上問題在 ASPNET中客戶端的Session信息存儲方式分為Cookie和Cookieless兩種
ASPNET中默認狀態下在客戶端還是使用Cookie存儲Session信息的如果我們想在客戶端使用Cookieless的方式存儲Session信息的方法如下
找到當前Web應用程序的根目錄打開WebConfig文件找到如下段落
< sessionState
mode="InProc"
stateConnectionString="tcpip=:"
sqlConnectionString="data source=;Trusted_Connection=yes"
cookieless="false"
timeout=""
/>
這段話中的cookieless="false"改為cookieless="true"這樣客戶端的Session信息就不再使用 Cookie存儲了而是將其通過URL存儲關閉當前的IE打開一個新IE重新訪問剛才的Web應用程序就會看到類似下面的樣子
其中http://localhost/MyTestApplication/(ulqsekheuicazgdl) /defaultaspx中黑體標出的就是客戶端的Session ID注意這段信息是由IIS自動加上的不會影響以前正常的連接
ASPNET中服務器端Session狀態的存儲 准備工作
為了您能更好的體驗到實驗現象您可以建立一個叫做SessionStateaspx的頁面然後把以下這些代碼添加到< body>< /body>中
< scriptrunat="server">
Sub Session_Add(sender As Object e As EventArgs)
Session("MySession") = textValue
spanInnerHtml = "Session data updated! < P>Your session contains: < font color=red>" & Session("MySession") ToString() & "< /font>"
End Sub
Sub CheckSession(sender As Object eAs EventArgs)
If (Session("MySession")Is Nothing) Then
spanInnerHtml = "NOTHING SESSION DATA LOST!"
Else
spanInnerHtml = "Your session contains: < font color= red>" & Session("MySession")ToString() & "< /font>"
End If
End Sub
< /script>
< formrunat="server"id="Form">
< inputid="text"type="text"runat="server"name="text">
< inputtype="submit"runat="server"OnServerClick="Session_Add"
value="Add to Session State " id="Submit"name="Submit">
< inputtype="submit"runat="server"OnServerClick="CheckSession"
value=" View Session State " id="Submit"name="Submit">
< /form>
< hrsize="">
< fontsize="">< spanid="span"runat="server" />< /font>
這個SessionStateaspx的頁面可以用來測試在當前的服務器上是否丟失了Session信息
將服務器Session信息存儲在進程中
讓我們來回到Webconfig文件的剛才那段段落中
< sessionState
mode="InProc"
stateConnectionString="tcpip=:"
sqlConnectionString="data source=;Trusted_Connection=yes"
cookieless="false"
timeout=""
/>
當mode的值是InProc時說明服務器正在使用這種模式
這種方式和以前ASP中的模式一樣就是服務器將Session信息存儲在IIS進程中當IIS關閉重起後這些信息都會丟失但是這種模式也有自己最大好處就是性能最高應為所有的Session信息都存儲在了IIS的進程中所以IIS能夠很快的訪問到這些信息這種模式的性能比進程外存儲Session信息或是在SQL Server中存儲Session信息都要快上很多這種模式也是ASPNET的默認方式
好了現在讓我們做個試驗打開剛才的SessionStateaspx頁面隨便輸入一些字符使其存儲在Session中然後讓我們讓IIS重起注意並不是使當前的站點停止再開始而是在IIS中本機的機器名的節點上點擊鼠標右鍵選擇重新啟動IIS(想當初使用NT時重新啟動IIS必須要重新啟動計算機才行微軟真是@#$%^&)返回到SessionStateaspx頁面中檢查剛才的Session信息發現信息已經丟失了
將服務器Session信息存儲在進程外
首先讓我們來打開管理工具>服務找到名為ASPNET State Service的服務啟動它實際上這個服務就是啟動一個要保存Session信息的進程啟動這個服務後你可以從Windows任務管理器>進程中看到一個名為 aspnet_stateexe的進程這個就是我們保存Session信息的進程
然後回到Webconfig文件中上述的段落中將mode的值改為StateServer保存文件後的重新打開一個IE打開 SessionStateaspx頁面保存一些信息到Session中這時讓我們重起IIS再回到SessionStateaspx頁面中查看剛才的Session信息發現沒有丟失
實際上這種將Session信息存儲在進程外的方式不光指可以將信息存儲在本機的進程外還可以將Session信息存儲在其他的服務器的進程中這時不光需要將mode的值改為StateServer還需要在stateConnectionString中配置相應的參數例如你的計算你是你想把Session存儲在IP為的計算機的進程中就需要設置成這樣 stateConnectionString="tcpip=:"當然不要忘記在的計算機中裝上NET Framework並且啟動ASPNET State Services服務
將服務器Session信息存儲在SQL Server中
首先還是讓我們來做一些准備工作啟動SQL Server和SQL Server代理服務在SQL Server中執行一個叫做 InstallSqlStatesql的腳本文件這個腳本文件將在SQL Server中創建一個用來專門存儲Session信息的數據庫及一個維護Session信息數據庫的SQL Server代理作業我們可以在以下路徑中找到那個文件
[system drive]winntMicrosoftNETFramework[version]
然後打開查詢分析器連接到SQL Server服務器打開剛才的那個文件並且執行稍等片刻數據庫及作業就建立好了這時你可以打開企業管理器看到新增了一個叫ASPState的數據庫但是這個數據庫中只是些存儲過程沒有用戶表實際上Session信息是存儲在了tempdb 數據庫的ASPStateTempSessions表中的另外一個ASPStateTempApplications表存儲了ASP中 Application對象信息這兩個表也是剛才的那個腳本建立的另外查看管理>SQL Server代理>作業發現也多了一個叫做ASPState_Job_DeleteExpiredSessions的作業這個作業實際上就是每分鐘去ASPStateTempSessions 表中刪除過期的Session信息的
接著我們返回到Webconfig文件修改mode的值改為SQLServer注意還要同時修改sqlConnectionString的值格式為
sqlConnectionString="data source=localhost; Integrated Security=SSPI;"
其中data source是指SQL Server服務器的IP地址如果SQL Server與IIS是一台機子寫 就行了Integrated Security=SSPI的意思是使用Windows集成身份驗證這樣訪問數據庫將以ASPNET的身份進行通過如此配置能夠獲得比使用userid=sa;password=口令的SQL Server驗證方式更好的安全性當然如果SQL Server運行於另一台計算機上你可能會需要通過Active Directory域的方式來維護兩邊驗證的一致性
From:http://tw.wingwit.com/Article/program/net/201311/14172.html