ASP.NET內置對象

(1)簡述ASP.NET內置對象。javascript

  答:ASP.NET提供了內置對象有Page、Request、Response、Application、Session、Server、Mail和Cookies。這些對象使用戶更容易收集經過瀏覽器請求發送的信息、響應瀏覽器以及存儲用戶信息,以實現其餘特定的狀態管理和頁面信息的傳遞。html

  (2)簡述Response對象。java

  答:Response對象用來訪問所建立的並客戶端的響應,輸出信息到客戶端,它提供了標識服務器和性能的HTTP變量,發送給瀏覽器的信息和在cookie中存儲的信息。它也提供了一系列用於建立輸出頁面的方法,如無所不在的Response . Write方法。算法

  (3)簡述Request對象。編程

  答:Request對象是用來獲取客戶端在請求一個頁面或傳送一個Form時提供的全部信息,這包括可以標識瀏覽器和用戶的HTTP變量,存儲在客戶端的cookie信息以及附在URL後面的值(查詢字符串或頁面中< Form>段中的HTML控件內的值)。c#

  (4)簡述Application對象。數組

  答:在asp.net環境下,Application對象來自HttpApplictionStat類。它能夠在多個請求、鏈接之間共享公用信息,也能夠在各個請求鏈接之間充當信息傳遞的管道。使用Application對象來保存咱們但願傳遞的變量。因爲在整個應用程序生存週期中,Application對象都是有效的,因此在不一樣的頁面中均可以對它進行存取,就像使用全局變量同樣方便。瀏覽器

  (5)簡述Session對象。緩存

  答:Session對象就是服務器給客戶端的一個編號。當一臺WEB服務器運行時,可能有若干個用戶瀏覽正在瀏覽這臺服務器上的網站。當每一個用戶首次與這臺WWW服務器創建鏈接時,他就與這個服務器創建了一個Session,同時服務器會自動爲其分配一個SessionID,用以標識這個用戶的惟一身份。特別說明的是Session對象的變量只是對一個用戶有效,不一樣的用戶的會話信息用不一樣的Session對象的變量存儲。在網絡環境下Session對象的變量是有生命週期的,若是在規定的時間沒有對Session對象的變量刷新,系統會終止這些變量。安全

  (6)簡述Server對象。

  答:Server對象提供對服務器上的方法和屬性的訪問。其中大多數方法和屬性是做爲實用程序的功能服務的。Server對象也是Page對象的成員之一,主要提供一些處理頁面請求時所需的功能;例如創建COM對象、將字符串的編譯碼等工做。

  (7)簡述Cookie對象。

  答:cookie是一小塊由瀏覽器存貯在客戶端系統上(硬盤)的文本,是一種標記。由WEB服務器嵌入用戶瀏覽器中,以便標識用戶,且隨同每次用戶請求發往WEB服務器。Cookies的值比A S P.NET其餘集合(例如Form和Server Variables )的值要複雜得多。

  (8)簡述Mail對象。

  答:ASP.NET被賦予了一個發送Email的新對象,名爲SmtpMail,實際上Mail對象由System.Web.Mail類庫實現(Class Library)。這個類庫由MailMessage對象、SmtpMail對象、MailFormat對象和MailAttachment對象組成,它們相互合做,完成E-mail的發送。

  (9)簡述GET傳送方式。

*********************

ASP.NET中經常使用的內置對象(一)

ASP.NET中經常使用的內置對象及功能說明以下所示:
對 象 名         功  能  說  明
Page           用於操做整個頁面
Response         用於向瀏覽器輸出信息
Request          用於獲取來自瀏覽器的信息
Server                    提供服務器端的一些屬性和方法
Application                用於共享多個會話和請求之間的全局信息
Session                   用於存儲特定用戶的會話信息
Cookies                   用於設置或獲取Cookie信息
一..Page對象
Page對象是由System.Web.UI命名空間中的Page類來實現的,Page 類與擴展名爲.aspx 的文件相關聯,這些文件在運行時被編譯爲Page對象,並緩存在服務器內存中。Page對象提供的經常使用屬性、方法及事件以下所示:
名  稱                功  能  說  明
IsPostBack屬性    獲取一個值,該值表示該頁是否正爲響應客戶端回發而加載
IsValid屬性      獲取一個值,該值表示頁面是否經過驗證
Application屬性    爲當前 Web 請求獲取 Application 對象。
Request屬性      獲取請求的頁的 HttpRequest 對象
Response屬性     獲取與 Page 關聯的 HttpResponse 對象。該對象使您得以將 HTTP 響應數據發送到客戶端,幷包含有關該響應的信息。
Session屬性      獲取 ASP.NET 提供的當前 Session 對象。
Server屬性      獲取 Server 對象,它是HttpServerUtility 類的實例。
DataBind方法     將數據源綁定到被調用的服務器控件及其全部子控件
RegisterClientScriptBlock方法  向頁面發出客戶端腳本塊
Init事件        當服務器控件初始化時發生
Load事件       當服務器控件加載到Page對象中時發生
Unload事件      當服務器控件從內存中卸載時發生

1.IsPostBack屬性
IsPostBack屬性用來獲取一個布爾值,若是該值爲true,則表示當前頁是爲響應客戶端回發(例如單擊按鈕)而加載,不然表示當前頁是首次加載和訪問。
private void Page_Load(object sender, System.EventArgs e)
{
 if( !Page.IsPostBack )
 {
 Label1.Text = "頁面第一次加載!";
 }
 else
 {
 Label1.Text = "頁面第二次或第二次以上加載!";
   }
}
IsValid屬性
IsValid屬性用來獲取一個布爾值,該值指示頁驗證是否成功,若是頁驗證成功,則爲 true;不然爲 false。通常在包含有驗證服務器控件的頁面中使用,只有在全部驗證服務器控件都驗證成功時,IsValid屬性的值才爲true。
private void Button_Click(Object Sender, EventArgs e)
    {
        if (Page.IsValid == true)  //也可寫成if (Page.IsValid)
        {
            mylabel.Text="您輸入的信息經過驗證!";
        }
        else
        {
            mylabel.Text="您的輸入有誤,請檢查後從新輸入!";
        }
    }
二.Request對象
Request對象是由類System.Web.HttpRequest來實現的。當客戶請求ASP.NET頁面時,全部的請求信息,包括請求報頭、請求方法、客戶端基本信息等都被封裝在Request對象中,利用Request對象就能夠讀取這些請求信息。Request對象經常使用的屬性和方法以下所示。
名  稱            功  能  說  明
Cookies屬性          獲取客戶端發送的Cookie的集合
Form屬性           獲取表單變量的集合
QueryString屬性        獲取HTTP查詢字符串變量集合
Form表單數據提交到服務器的方式有兩種:Get和Post方式。
i. . get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中能夠看到。post是經過HTTP post機制,將表單內各個字段與其內容放置在HTML HEADER內一塊兒傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
ii. . 對於get方式,服務器端用Request.QueryString獲取變量的值,對於post方式,服務器端用Request.Form獲取提交的數據。
iii.  get傳送的數據量較小,不能大於2KB。post傳送的數據量較大,通常被默認爲不受限制。但理論上,IIS4中最大量爲80KB,IIS5中爲100KB。
iv.  get安全性很是低,post安全性較高。
Form數據集合
使用Request的Form集合來獲取客戶端經過POST方法傳送的表單數據,例如,服務器上有兩個網頁form.htm和do.aspx,form.htm中包含一個表單,表單傳送數據的方法爲POST,而且表單提交到同一目錄下的do.aspx。form.htm的代碼以下:
<html>
    <head>
    <title>使用POST傳送數據</title>
    </head>
    <body>
    <form method="post" action="do.aspx">
    請輸入您的名字:<input type="text" name="mingzi"><br>
    <input type="submit" value="提交">
    </form>
    </body>
    </html>
在do.aspx中將使用Request.Form["mingzi"]來獲取用戶輸入的名字,do.aspx的代碼以下:
private void Page_Load(Object o,EventArgs e) 
//頁面加載後即顯示錶單數據
    {
        string strmessage="您的名字爲:";  //定義字符串變量並賦初值
        strmessage+= Request.Form["mingzi"];  //把表單數據串接到變量
        Response.Write(strmessage);//輸出變量
    }

QueryString數據集合
能夠利用QueryString集合來獲取客戶端經過GET方法傳送的表單數據,若是把form.htm中表單的method屬性值由POST改成GET,則在do.aspx中就須要經過Request.QueryString ["mingzi"]來獲取輸入的名字。由於GET方法傳送數據有必定的限制而且不安全,因此表單通常不使用GET方法。
private void Page_Load(object sender, System.EventArgs e)
  {
   if(Request.QueryString["mingzi"].ToString()!="")
    Response.Write("您的名字是:"+Request.QueryString["mingzi"].ToString());
  }
在Web應用程序開發中,QueryString經常使用來獲取URL查詢字符串中變量的值,這與使用GET方法傳送表單數據的狀況同樣。例如,客戶端使用以下地址請求:
http://localhost/doit.aspx?name=zhangsan&sex=nan   
或打開以下的超級連接:
<a href="
http://localhost/doit.aspx?name=zhangsan&sex=nan">doit.aspx</a>
在doit.aspx中就可使用Request.QueryString["name"]和Request.QueryString["sex"]來獲取相應的值zhangsan和nan。

******************************

本想寫一篇總結ASP.NET內置對象的文章,結果發現網上有篇不錯的,就轉了過來

ASP.NET的內置對象介紹
1.Response
2.Request
3.Server
4.Application
5.Session
6.Cooki

Request對象主要是讓服務器取得客戶端瀏覽器的一些數據,包括從HTML表單用Post或者GET方法傳遞的參數、Cookie和用戶認證。由於Request對象是Page對象的成員之一,因此在程序中不須要作任何的聲明便可直接使用;
其類名爲 HttpRequest
屬性不少,但方法不多,只有一個BinaryRead()
1.使用Request.Form屬性獲取數據
經過該屬性,讀取<Form></Form>之間的表單數據.注意:提交方式要設置爲「Post」。
與Get方法相比較,使用Post方法能夠將大量數據發送到服務器端
2.利用Request.QueryString屬性獲取數據
Request對象的QuerySting屬性能夠獲取 HTTP 查詢字符串變量集合 。 經過該屬性,咱們能夠讀取地址信息 http://localhost/aaa.aspx?uid=tom&pwd=abc 其中標識爲紅色部分的數據.
注意:提交方式要設置爲「Get」
3.問題:Request.Form用於表單提交方式爲Post的狀況,而Request.QueryString用於表單提交方式爲Get的狀況,若是用錯,則獲取不到數據。
解決方法:利用Request(「元素名」)來簡化操做。
4.Request.ServerVariables("環境變量名稱")
相似的還有:UserHostAddress,Browser,Cookies,ContentType,IsAuthenticated
Item,Params

Response對象用語輸出數據到客戶端,包括向瀏覽器輸出數據、重定向瀏覽器到另外一個URL或向瀏覽器輸出Cookie文件。
其類名爲httpResponse
屬性和方法
Write() 向客戶端發送字符串信息
BufferOutPut屬性 是否使用緩存
Clear() 清除緩存
Flush() 強制輸出緩存的全部數據
Redirect() 網頁轉向地址
End() 終止當前頁的運行
WriteFile() 讀取一個文件,而且寫入客戶端輸出流
(實質:打開文件,而且輸出到客戶端。)
1.Response.Write 變量數據或字符串
Response.Write (變量數據或字符串)
<%=…%>
Response.Write("<script language=javascript>alert('歡迎學習ASP.NET')</script>")
Response.Write("<script>window.open('WebForm2.aspx')</script>")
2.Response對象的Redirect方法將客戶端瀏覽器重定向到另外的URL上,即跳轉到另外一個網頁。
例如:
Response.Redirect("http://www.163.net/")
3. Response.End() 終止當前頁的運行
4.Response.WriteFile(FileName)
其中:
FileName 指代需向瀏覽器輸出的文件的文件名

Server對象提供對服務器上的方法和屬性進行的訪問 .其類名稱是HttpServerUtility.
Server對象的主要屬性有:
MachineName:獲取服務器的計算機名稱。
ScriptTimeout:獲取和設置請求超時(以秒計)。
方法名稱 說明
CreateObject 建立 COM 對象的一個服務器實例。
Execute 執行當前服務器上的另外一個aspx頁,執行完該頁後再返回本頁繼續執行
HtmlEncode 對要在瀏覽器中顯示的字符串進行HTML編碼並返回已編碼的字符串。
HtmlDecode 對HTML編碼的字符串進行解碼,並返回已解碼的字符串。
MapPath 返回與 Web 服務器上的指定虛擬路徑相對應的物理文件路徑。
Transfer 終止當前頁的執行,併爲當前請求開始執行新頁。
UrlEncode 將表明URL的字符串進行編碼,以便經過 URL 從 Web 服務器到客戶端進行可靠的 HTTP 傳輸。
UrlDecode 對已被編碼的URL字符串進行解碼,並返回已解碼的字符串。
UrlPathEncode 對 URL 字符串的路徑部分進行 URL 編碼,並返回已編碼的字符串。
編碼:
Server.HtmlEncode(「HTML代碼」)
解碼:
Server.HtmlDecode(「已編碼的HTML」)
1.Server對象的MapPath方法將虛擬路徑或相對於當前頁的相對路徑轉化爲Web 服務器上的物理文件路徑。
語法:Server.MapPath(「虛擬路徑」)
String FilePath
FilePath = Server.MapPath(「/」)
Response.Write(FilePath)

Application對象在實際網絡開發中的用途就是記錄整個網絡的信息,如上線人數、在線名單、意見調查和網上選舉等。在給定的應用程序的多有用戶之間共享信息,並在服務器運行期間持久的保存數據。並且Application對象還有控制訪問應用層數據的方法和可用於在應用程序啓動和中止時觸發過程的事件。
1.使用Application對象保存信息
使用Application對象保存信息
Application(「鍵名」) = 值

Application(「鍵名」,值)
獲取Application對象信息
變量名 = Application(「鍵名」)
或:變量名 = Application.Item(「鍵名」)
或:變量名 = Application.Get(「鍵名」)
更新Application對象的值
Application.Set(「鍵名」, 值)
刪除一個鍵
Application.Remove(「鍵名」, 值)
刪除全部鍵
Application.RemoveAll()
或Application.Clear()
2.有可能存在多個用戶同時存取同一個Application對象的狀況。這樣就有可能出現多個用戶修改同一個Application命名對象,形成數據不一致的問題。
HttpApplicationState 類提供兩種方法 Lock 和 Unlock,以解決對Application對象的訪問同步問題,一次只容許一個線程訪問應用程序狀態變量。
關於鎖定與解鎖
鎖定:Application.Lock()
訪問:Application(「鍵名」) = 值
解鎖:Application.Unlock()
注意:Lock方法和UnLock方法應該成對使用。
可用於網站訪問人數,聊天室等設備
3. 使用Application事件
在ASP.NET 應用程序中能夠包含一個特殊的可選文件——Global.asax 文件,也稱做 ASP.NET 應用程序文件,它包含用於響應 ASP.NET或HTTP模塊引起的應用程序級別事件的代碼。
Global.asax 文件提供了7個事件,其中5個應用於Application對象

事件名稱 說明
Application_Start 在應用程序啓動時激發
Application_BeginRequest 在每一個請求開始時激發
Application_AuthenticateRequest 嘗試對使用者進行身份驗證時激發
Application_Error 在發生錯誤時激發
Application_End 在應用程序結束時激發

Session即會話,是指一個用戶在一段時間內對某一個站點的一次訪問。
Session對象在.NET中對應HttpSessionState類,表示「會話狀態」,能夠保存與當前用戶會話相關的信息。
Session對象用於存儲從一個用戶開始訪問某個特定的aspx的頁面起,到用戶離開爲止,特定的用戶會話所須要的信息。用戶在應用程序的頁面切換時,Session對象的變量不會被清除。
對於一個Web應用程序而言,全部用戶訪問到的Application對象的內容是徹底同樣的;而不一樣用戶會話訪問到的Session對象的內容則各不相同。 Session能夠保存變量,該變量只能供一個用戶使用,也就是說,每個網頁瀏覽者都有本身的Session對象變量,即Session對象具備惟一性。
(1)將新的項添加到會話狀態中
語法格式爲:
Session ("鍵名") = 值
或者
Session.Add( "鍵名" , 值)
(2)按名稱獲取會話狀態中的值
語法格式爲:
變量 = Session ("鍵名")
或者
變量 = Session.Item("鍵名")
(3)刪除會話狀態集合中的項
語法格式爲:
Session.Remove("鍵名")
(4)清除會話狀態中的全部值
語法格式爲:
Session.RemoveAll()
或者
Session.Clear()
(5)取消當前會話
語法格式爲:
Session.Abandon()
(6)設置會話狀態的超時期限,以分鐘爲單位。
語法格式爲:
Session.TimeOut = 數值
Global.asax 文件中有2個事件應用於Session對象
事件名稱 說明
Session_Start 在會話啓動時激發
Session_End 在會話結束時激發

Cookie就是Web服務器保存在用戶硬盤上的一段文本。Cookie容許一個Web站點在用戶的電腦上保存信息而且隨後再取回它。信息的片段以‘鍵/值’對的形式存儲。
Cookie是保存在客戶機硬盤上的一個文本文件,能夠存儲有關特定客戶端、會話或應用程序的信息,在.NET中對應HttpCookie類。
有兩種類型的Cookie:會話Cookie(Session Cookie)和持久性Cookie。前者是臨時性的,一旦會話狀態結束它將不復存在;後者則具備肯定的過時日期,在過時以前Cookie在用戶的計算機上以文本文件的形式存儲。
在服務器上建立並向客戶端輸出Cookie能夠利用Response對象實現。
Response對象支持一個名爲Cookies的集合,能夠將Cookie對象添加到該集合中,從而向客戶端輸出Cookie。
經過Request對象的Cookies集合來訪問Cookie

**********************

本章主要介紹ASP.NET的內置對象及ASP.NET應用程序的配置,並在最後一節介紹ASP.NET網站的預編譯和編譯。ASP.NET的內置對象包括Request、Response、Server、Application、Session、Cookie等。應用程序的配置部分主要包括瞭解ASP.NET應用程序配置、基本配置元素、自定義應用程序設置的配置和檢索等。下面將分別對這些內容進行闡述。

14.1  ASP.NET內置對象

ASP.NET提供了許多內置對象,前面所使用的Response對象就是其中一個。這些對象提供了至關多的功能,例如,能夠在兩個網頁之間傳遞變量、輸出數據,以及記錄變量值等。這些對象在ASP時代已經存在,到了ASP.NET環境下,這些功能仍然可使用。並且,它們的種類更多,功能也更強大。

ASP.NET內置對象是由IIS控制檯初始化的ActiveX DLL組件。由於IIS能夠初始化這些內置組件用於ASP.NET中,因此用戶也能夠直接引用這些組件來實現本身的編程,便可以在應用程序中,經過引用這些組件來實現訪問ASP.NET內置對象的功能。

本節將對ASP.NET的這些內置對象,以及Cache對象和Global文件進行詳細的講解。

14.1.1  Response對象

Response對象是HttpResponse類的一個實例。該類主要是封裝來自ASP.NET操做的HTTP響應信息。

1.Response對象的屬性

Response對象的屬性如表14-1所示。

表14-1  Response對象的屬性

   

   

   

BufferOutput

獲取或設置一個值,該值指示是否緩衝輸出,並在完成處理整個頁以後將其發送

若是緩衝了到客戶端的輸出,則爲true;不然爲false。默認爲true

續表 

   

   

  

Cache

獲取Web頁的緩存策略(過時時間、保密性、變化子句)

包含有關當前響應的緩存策略信息的HttpCachePolicy對象

Charset

獲取或設置輸出流的HTTP字符集

輸出流的HTTP字符集

IsClientConnected

獲取一個值,經過該值指示客戶端是否仍鏈接在服務器上

若是客戶端當前仍在鏈接,則爲true;不然爲false

實例14-1:使用緩衝區

因爲Response對象的BufferOutput屬性默認爲True,因此要輸出到客戶端的數據都暫時存儲在緩衝區內,等到全部的事件程序,以及全部的頁面對象所有解譯完畢後,纔將全部在緩衝區中的數據送到客戶端的瀏覽器。下面的例子將演示緩衝區是如何工做的。

<%

Response.Write("緩存已清除" + "<Br>");

%>

<Script Language="C#" Runat="Server">

void Page_Load(Object sender, EventArgs e)

{

Response.Write("緩存清除前" + "<Br>");

Response.Clear();

}

</Script>

上述程序代碼實例首先在「Page_Load」事件中送出「緩存清除前」這一行,此時的數據存在緩衝區中。接着使用Response對象的Clear方法將緩衝區的數據清除,因此剛剛送出的字符串已經被清除。而後IIS開始讀取HTML組件的部分,並將結果送至客戶端的瀏覽器。由執行結果只出現「緩存已清除」可知,使用Clear方法以前的數據並無出如今瀏覽器上,因此程序開始時是存在緩衝區內的。若是在相同的程序中加入「Response.BufferOutput=false」:

<%

Response.Write("清除以後的數據<Br>");

%>

<Script Language="C#" Runat="Server">

void Page_Load(Object sender, EventArgs e)

{

Response.BufferOutput=false;

Response.Write("清除緩衝區以前的數據" + "<Br>");

Response.Clear();

}

</Script>

能夠發現,執行的結果並無由於使用Clear方法而將緩衝區的數據清除,這代表數據是直接輸出而沒有存放在緩衝區內。

2.Response對象的方法

Response對象能夠輸出信息到客戶端,包括直接發送信息給瀏覽器、重定向瀏覽器到另外一個URL或設置cookie的值。表14-2列舉了幾個經常使用的方法。

表14-2  Response對象的方法

   

   

Write

將指定的字符串或表達式的結果寫到當前的HTTP輸出

End

中止頁面的執行並獲得相應結果

Clear

用來在不將緩存中的內容輸出的前提下,清空當前頁的緩存,僅當使用了緩存輸出時,才能夠利用Clear方法

Flush

將緩存中的內容當即顯示出來。該方法有一點和Clear方法同樣,它在腳本前面沒有將Buffer屬性設置爲True時會出錯。和End方法不一樣的是,該方法調用後,該頁面可繼續執行

Redirect

使瀏覽器當即重定向到程序指定的URL

ASP.NET中引用對象方法的語法是「對象名.方法名」。「方法」就是嵌入到對象定義中的程序代碼,它定義對象怎樣去處理信息。使用嵌入的方法,對象便知道如何去執行任務,而不用提供額外的指令。如下將經過幾個小例子來說解Response對象的經常使用方法。

實例14-2:使用Response.write,向客戶端發送信息

for(int i=1;i<=500;i++)

{

 Response.Write("i= "+i+"<BR>");

}

本例使用「write」方法,向屏幕輸出500個值。

實例14-3:使用Response.End方法調試程序

End方法能夠中止當前頁面的執行,基於這個緣由,能夠結合Response.write方法輸出當前頁面上的某個變量、數組值。

<form id="Form1" method="post" runat="server">

    輸入一個數值:<asp:TextBox id="txtVar" runat="server"></asp:TextBox>

<asp:Button id="btnSubmit" runat="server" Text="計算該值的平方值" onclick="btnSubmit_Click"></asp:Button>

</form>

<Script Language="C#" Runat="Server">

void btnSubmit_Click(Object sender, EventArgs e)

{

    int N = int.Parse(Request.Form["txtVar"].ToString());

    Response.Write("N=" + N + "<br>");

    Response.Write("該值的平方值是:" + N*N);

}

</Script>

運行上面的代碼,結果如圖14-1所示。

圖14-1  使用Response.End調試程序

輸入一個值「6」,而後單擊「計算該值的平方值」按鈕,屏幕將顯示以下結果:

N=6

該值的平方值是:36

在代碼中加上「Response.End()」,代碼以下:

<Script Language="C#" Runat="Server">

void btnSubmit_Click(Object sender, EventArgs e)

{

    int N = int.Parse(Request.Form["txtVar"].ToString());

    Response.Write("N=" + N + "<br>");

Response.End();

    Response.Write("該值的平方值是:" + N*N);

}

</Script>

這時再運行代碼,將只會顯示:

N=6

實驗證實,「Response.End()」方法中止了當前頁面的執行。這僅僅是一個小例子,讀者能夠依此類推,在程序中使用End方法進行調試。不過千萬要記住調試完代碼後,不要忘記把調試用的「Response.End()」刪掉。

實例14-4:使用Redirect方法進行頁面重定向

在網頁編程中,常常會遇到在程序執行到某個位置進行頁面調轉的狀況。Response.Redirect方法能夠知足這種需求,例如代碼:

Response.Redirect("http://www.163.com");

執行該代碼,頁面將跳轉到網易163的主頁。

14.1.2  Request對象

Request對象是HttpRequest類的一個實例。它可以讀取客戶端在Web請求期間發送的HTTP值。

1.Request對象的屬性

Request對象的屬性如表14-3所示。

表14-3  Request對象的屬性

   

   

  

QueryString

獲取 HTTP 查詢字符串變量集合

NameValueCollection對象

Path

獲取當前請求的虛擬路徑

當前請求的虛擬路徑

UserHostAddress

獲取遠程客戶端的 IP 主機地址

遠程客戶端的IP地址

Browser

獲取有關正在請求的客戶端的瀏覽器功能的信息

HttpBrowserCapabilities對象

實例14-5:獲取QueryString值

程序中,常常可使用QueryString來得到從上一個頁面傳遞來的字符串參數。例如,在頁面1中建立一個鏈接,指向頁面2,並用QueryString來查詢兩個變量:

<a href="Page2.aspx?ID=6&Name=Wang">查看</a>

在頁面2中接收到從頁面1中傳過來的兩個變量:

<Script Language="C#" Runat="Server">

void Page_Load(object sender, System.EventArgs e)

{

    Response.Write("變量ID的值:" + Request.QueryString["ID"] +"<br>");

    Response.Write("變量Name的值:" + Request.QueryString["Name"]);

}

</Script>

運行上面代碼結果以下:

變量ID的值:6

變量Name的值:Wang

上面的例子能夠成功地獲得QueryString的值。

用相似方法,能夠獲取Form,Cookies,SeverVaiables的值。調用方法都是:

Request.Collectlon[」VariabLe」]

Collectlon包括QueryString,ForM,Cookies,SeverVaiables四種集合,VariabLe爲要查詢的關鍵字。不過,這裏的Collectlon是能夠省略的,也就是說,Request["Variable"]與Request.Collection["Variable"]這兩種寫法都是容許的。若是省略了Collection,那麼Request對象會依照QueryString,Form,Cookies,SeverVaiables的順序查找,直至發現Variable所指的關鍵字並返回其值,若是沒有發現其值,方法則返回空值(Null)。

不過,爲了優化程序的執行效率,建議最好仍是使用Collection,由於過多地搜索就會下降程序的執行效率。

2.Request對象的方法

Request對象的方法如表14-4所示。

表14-4  Request對象的方法

   

   

BinaryRead

執行對當前輸入流進行指定字節數的二進制讀取

MapPath

爲當前請求將請求的 URL 中的虛擬路徑映射到服務器上的物理路徑

實例14-6:獲取文件的物理路徑

Request.MapPath("FileName");

能夠經過這條語句來獲得某個文件的實際物理位置,這個方法經常用在須要使用實際路徑的地方。

14.1.3  Application對象

Application對象是HttpApplicationState類的一個實例。

HttpApplicationState類的單個實例,將在客戶端第一次從某個特定的ASP.NET應用程序虛擬目錄中請求任何URL資源時建立。對於Web服務器上的每一個ASP.NET應用程序,都要建立一個單獨的實例。而後經過內部Application對象公開對每一個實例的引用。Application對象有以下特色:

— 數據能夠在Application對象內部共享,所以一個Application對象能夠覆蓋多個用戶。

— 一個Application對象包含事件,能夠觸發某些Applicatin對象腳本。

— 個別Application對象能夠用Internet Service Manager來設置而得到不一樣屬性。

— 單獨的Application對象能夠隔離出來在它們本身的內存中運行,這就是說,若是一我的的Application遭到破壞,就不會影響其餘人。

— 能夠中止一個Application對象(將其全部組件從內存中驅除)而不會影響到其餘應用程序。

一個網站能夠有不止一個Application對象。典型狀況下,能夠針對個別任務的一些文件建立個別的Application對象。例如,能夠創建一個Application對象來適用於所有公用用戶,而再建立另一個只適用於網絡管理員的Application對象。

Application對象使給定應用程序的全部用戶之間共享信息,而且在服務器運行期間持久地保存數據。由於多個用戶能夠共享一個Application對象,因此必需要有Lock和Unlock方法,以確保多個用戶沒法同時改變某一屬性。Application對象成員的生命週期止於關閉IIS或使用Clear方法清除。

1.Application對象的屬性

Application對象的屬性如表14-5所示。

表14-5  Application對象的屬性

   

   

  

AllKeys

獲取HttpApplicationState集合中的訪問鍵

HttpApplicationState對象名的字符串數組

Count

獲取HttpApplicationState集合中的對象數

集合中的Item對象數。默認爲0

2.Application對象的方法

Application對象的方法如表14-6所示。

表14-6  Application對象的方法

   

   

Add

新增一個新的Application對象變量

Clear

清除所有的Application對象變量

Get

使用索引關鍵字或變數名稱獲得變量值

GetKey

使用索引關鍵字來獲取變量名稱

Lock

鎖定所有的Application變量

Remove

使用變量名稱刪除一個Application對象

RemoveAll

刪除所有的Application對象變量

Set

使用變量名更新一個Application對象變量的內容

UnLock

解除鎖定的Application變量

使用Application對象的語法以下所示:

Application("變量名")="變量值"

實例14-7:設置、獲取Application對象的內容

代碼以下:

<script language="C#" runat="server">

void Page_Load(object sender, System.EventArgs e)

{

    Application.Add("App1","Value1");

    Application.Add("App2","Value2");

    Application.Add("App3","Value3");

   

    int N;

    for(N=0;N<Application.Count;N++)

    {

        Response.Write("變量名:"+ Application.GetKey(N));

        Response.Write("變量值:"+ Application.Get(N) +"<br>");

    }

     Application.Clear();

}

</script>

在本例中,首先經過Add方法添加三個Application對象,並賦以初值,接着經過Count屬性獲得Application對象的數量,而後經過循環操做GetKey方法和Get方法分別獲得新增對象的「索引」和「索引」所對應的「值」。

執行上面代碼,獲得以下結果:

變量名:App1變量值:Value1

變量名:App2變量值:Value2

變量名:App3變量值:Value3

實例14-8:Application對象的加鎖與解鎖

Lock方法能夠阻止其餘客戶修改存儲在Application對象中的變量,以確保在同一時刻僅有一個客戶可修改和存取Application變量。若是用戶沒有明確調用Unlock方法,則服務器將在頁面文件結束或超時便可解除對Application對象的鎖定。

Unlock方法可使其餘客戶端在使用Lock方法鎖住Application對象後,修改存儲在該對象中的變量。若是未顯式地調用該方法,Web服務器將在頁面文件結束或超時後解鎖Application對象。

使用方法以下:

Application.Lock();

Application["變量名"]="變量值";

Application.UnLock();

14.1.4  Session對象

Session對象是HttpSessionState的一個實例。該類爲當前用戶會話提供信息,還提供對可用於存儲信息的會話範圍的緩存的訪問,以及控制如何管理會話的方法。

Session的發明是填補HTTP協議的侷限,HTTP協議工做過程是,用戶發出請求,服務器端作出響應,這種用戶端和服務器端之間的聯繫都是離散的,非連續的。在HTTP協議中沒有什麼可以容許服務器端來跟蹤用戶請求的。在服務器端完成響應用戶的請求後,服務器端不能持續與該瀏覽器保持鏈接。從網站的觀點上看,每個新的請求都是單獨存在的,所以,當用戶在多個主頁間轉換時,就根本沒法知道他的身份。

可使用Session對象存儲特定用戶會話所需的信息。這樣,當用戶在應用程序的Web頁之間跳轉時,存儲在Session對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。

當用戶請求來自應用程序的Web頁時,若是該用戶尚未會話,則Web服務器將自動建立一個Session對象。當會話過時或被放棄後,服務器將停止該會話。

當用戶第一次請求給定的應用程序中的aspx文件時,ASP.NET將生成一個SessionID。SessionID是由一個複雜算法生成的號碼,它惟一標識每一個用戶會話。在新會話開始時,服務器將Session ID做爲一個cookie存儲在用戶的Web瀏覽器中。

在將SessionID cookie存儲於用戶的瀏覽器以後,即便用戶請求了另外一個.aspx文件,或請求了運行在另外一個應用程序中的.aspx文件,ASP.NET仍會重用該cookie跟蹤會話。與此類似,若是用戶故意放棄會話或讓會話超時,而後再請求另外一個.aspx文件,那麼ASP.NET將以同一個cookie開始新的會話。只有當服務器管理員從新啓動服務器,或用戶從新啓動Web瀏覽器時,此時存儲在內存中的SessionID設置才被清除,用戶將會得到新的SessionID cookie。

經過重用SessionID cookie,Web應用程序將發送給用戶瀏覽器的cookie數量降爲最低。另外,若是用戶決定該Web應用程序不須要會話管理,就能夠不讓Web應用程序跟蹤會話和向用戶發送SessionID。

Session對象最多見的一個用法就是存儲用戶的首選項。例如,若是用戶指明不喜歡查看圖形,另外其還常常被用在鑑別客戶身份的程序中。要注意的是,會話狀態僅在支持cookie的瀏覽器中保留,若是客戶關閉了cookies選項,Session也就不能發揮做用了。

ASP.NET的Sessions很是好用,可以利用Session對象來對Session全面控制,若是須要在一個用戶的Session中存儲信息,只須要簡單地直接調用Session對象就能夠了,下面就是個例子:

Session("Myname")=Response.form("Username");

Session("Mycompany")=Response.form("Usercompany");

應注意的是,Session對象是與特定用戶相聯繫的。針對某一個用戶賦值的Session對象是和其餘用戶的Session對象徹底獨立的,不會相互影響。換句話說,這裏面針對每個用戶保存的信息是每個用戶本身獨享的,不會產生共享狀況。

很明顯,對於不一樣的用戶,Session對象的Myname變量和Mycompany變量各自是不一樣的,當每一個人在網站的不一樣主頁間瀏覽時,這種針對我的的變量會一直保留,這樣做爲身份認證是十分有效的。

1.Session對象的屬性

Session對象的屬性如表14-7所示。

表14-7  Session對象的屬性

   

  

  

Count

獲取會話狀態集合中Session對象的個數

Session對象的個數

TimeOut

獲取並設置在會話狀態提供程序終止會話以前各請求之間所容許的超時期限

超時期限(以分鐘爲單位)

SessionID

獲取用於標識會話的惟一會話ID

會話ID

實例14-9:獲取Session對象的個數

Count屬性能夠幫助統計正在使用的Session對象的個數,語句很是簡單,示例以下:

Response.Write(Session.Count);

實例14-10:設置Session對象的生存期

每個客戶端鏈接服務器後,服務器端都要創建一個獨立的Session,而且須要分配額外的資源來管理這個Session,但若是客戶端因某些緣由,例如,去忙其餘的工做,中止了任何操做,但沒有關閉瀏覽器,那麼這種狀況下,服務器端依然會消耗必定的資源來管理Session,這就形成了對服務器資源的浪費,下降了服務器的效率。因此,能夠經過設置Session生存期,以減小這種對服務器資源的浪費。

要更改Session的有效期限,只要設定TimeOut屬性便可;TimeOut屬性的默認值是20分鐘。

<Html>

<Form Runat="Server" ID="Form1">

<Asp:Button Id="Button1" Text="演示" OnClick="Button1_Click" Runat="Server" />

目前時間:<Asp:Label Id="Label1" Runat="Server" />

<P>

第一個Session的值:<Asp:Label Id="Label2" Runat="Server" /><Br>

第二個Session的值:<Asp:Label Id="Label3" Runat="Server" /><Br>

</Form>

<Script Language="c#" Runat="Server">

void Page_Load(object sender, System.EventArgs e)

{

    if(!Page.IsPostBack)

    {

        Session["Session1"]="Value1";

        Session["Session2"]="Value2";

        Session.Timeout=1;

        DateTime now=DateTime.Now;

        string format="HH:mm:ss";

        Label1.Text=now.ToString(format);

        Label2.Text=Session["Session1"].ToString();

        Label3.Text=Session["Session2"].ToString();

    }

}

void Button1_Click(object sender, System.EventArgs e)

{

    DateTime now=DateTime.Now;

    string format="HH:mm:ss";

    Label1.Text=now.ToString(format);

    Label2.Text=Session["Session1"].ToString();

    Label3.Text=Session["Session2"].ToString();

}

</Script>

</Html>

在本例中,經過Timeout屬性設置了Session的生存期爲1分鐘。運行上面代碼,顯示結果如圖14-2所示。

圖14-2  設置Session對象的生存期

一分鐘後,單擊「演示」按鈕,頁面會出現錯誤,提示

Label2.Text=Session["Session1"].ToString();   

Label3.Text=Session["Session2"].ToString();

這兩句代碼錯誤,爲何會這樣呢?緣由就在於,Session的生存期限超過了一分鐘,已經沒法得到Session["Session1"]和Session["Session2"]的值。

2.Session對象的方法

Session對象的方法如表14-8所示:

表14-8  Session對象的方法

   

   

Add

新增一個Session對象

Clear

清除會話狀態中的全部值

Remove

刪除會話狀態集合中的項

RemoveAll

清除全部會話狀態值

實例14-11:經過Add方法設置Session對象

經過Add方法能夠設置Session對象的值,語法以下:

Session.Add("變量名",變量值);

在具體應用中,能夠這樣使用:

int userId = 1;

string userName = "test";

string userPwd = "sdgtrertkl";

Session.Add("userId",userId);

Session.Add("userName", userName);

Session.Add("userPwd", userPwd);

在上面例子中建立了userId,userName,userPwd三個Session來存儲用戶的登陸信息。程序隨時均可以經過這三個Session對象來查看用戶的鏈接狀態,這是實際的項目中最多見的Session應用。

須要注意的是,也能夠不使用Add方法來設置Session對象,語法以下:

Session["變量名"]=變量值;

這樣,上面的例子就能夠改成:

Session["userId"] = userId;

Session["userName"] = userName;

Session["userPwd"] = userPwd;

須要指出的是,以上兩種語句在做用上是相同的,讀者能夠根據本身的習慣來使用。

14.1.5  Server對象

Server對象是HttpServerUtility的一個實例。該對象提供對服務器上的方法和屬性的訪問。

1.Server對象的屬性

Server對象的屬性如表14-9所示:

表14-9  Server對象的屬性

   

   

  

MachineName

獲取服務器的計算機名稱

本地計算機的名稱

ScriptTimeout

獲取和設置請求超時

請求的超時設置(以秒計)

實例14-12:返回服務器計算機名稱

經過Server對象的MachineName屬性來獲取服務器計算機的名稱,示例以下:

<Script Language="c#" Runat="Server">

void Page_Load(object sender, System.EventArgs e)

{

    String ThisMachine;

    ThisMachine = Server.MachineName;

    Response.Write(ThisMachine);

}

</Script>

實例14-13:設置客戶端請求的超時期限

用法以下:

Server.ScriptTimeout = 60;

本例中,將客戶端請求超時期限設置爲60秒,若是60秒內沒有任何操做,服務器將斷開與客戶端的鏈接。

2.Server對象的方法

Server對象的方法如表14-10所示:

表14-10  Server對象的方法

   

   

CreateObject

建立COM 對象的一個服務器實例

CreateObjectFromClsid

建立COM 對象的服務器實例,該對象由對象的類標識符(CLSID)標識

Execute

使用另外一頁執行當前請求

Transfer

終止當前頁的執行,併爲當前請求開始執行新頁

HtmlDecode

對已被編碼以消除無效HTML字符的字符串進行解碼

HtmlEncode

對要在瀏覽器中顯示的字符串進行編碼

MapPath

返回與Web服務器上的指定虛擬路徑相對應的物理文件路徑

UrlDecode

對字符串進行解碼,該字符串爲了進行HTTP傳輸而進行編碼並在URL中發送到服務器

UrlEncode

編碼字符串,以便經過URLWeb服務器到客戶端進行可靠的HTTP傳輸

實例14-14:利用HtmlEncode和HtmlDecode方法對網頁內容編碼

當想在網頁上顯示HTML標籤時,若在網頁中直接輸出則會被瀏覽器解譯爲HTML的內容,因此要經過Server對象的HtmlEncode方法將它編碼再輸出;若要將編碼後的結果譯碼回本來的內容,則使用HtmlDecode方法。下列程序代碼範例使用HtmlEncode方法將「<B>HTML內容</B>」編碼後輸出至瀏覽器,再利用HtmlDecode方法將把編碼後的結果譯碼還原:

<html>

<Script Language="c#" Runat="Server">

void Page_Load(object sender, System.EventArgs e)

{

    String strHtmlContent;

    strHtmlContent=Server.HtmlEncode("<B>HTML 內容</B>");

    Response.Write(strHtmlContent);

    Response.Write("<P>");

    strHtmlContent=Server.HtmlDecode(strHtmlContent);

    Response.Write(strHtmlContent);

}

</Script>

</html>

運行上述示例輸出結果能夠發現,編碼後的HTML標註變成了「&lt;B&gt;HTML內容&lt;/B&gt;」,這是由於「<B>」變成了「&lt;B&gt;」,「</B>」變成了「&lt;/B&gt;」,因此才能在頁面中顯示HTML標註。

實例14-15:使用URLEncode方法對URL進行編碼

就像HTMLEncode方法使客戶能夠將字符串翻譯成可接受的HTML格式同樣,Server對象的URLEncode方法能夠根據URL規則對字符串進行正確編碼。當字符串數據以URL的形式傳遞到服務器時,在字符串中不容許出現空格,也不容許出現特殊字符。爲此,若是但願在發送字符串以前進行URL編碼,則可使用Server. URLEncode方法。

該函數已被重載,語法以下:

對字符串進行URL編碼,並返回已編碼的字符串。

public string UrlEncode(string);

URL對字符串進行編碼,並將結果輸出發送到TextWriter輸出流。

public void UrlEncode(string, TextWriter);

例以下面例子:

<%Response.Write(Server.URLEncode("http://www.microsoft.com"))%>

產生以下輸出:

http %3A%2F%2Fwww%2Emicrosoft%2Ecom

利用QueryString在不一樣主頁間傳遞信息時,若是信息帶有空格或特殊字符,那麼必須進行Encode操做,由於若是不這樣作,極可能使得接受信息的那邊接受到一些所不指望的奇怪字符串。注意,不要對QueryString的名稱及等號進行Encode操做,只須要將其值進行Encode操做就能夠了。

進行了Encode操做後,效果以下:

Message=This+Query+String+has+been+URL+ENCODED%2E

用戶並不須要考慮對上面的字符串再進行解碼,會自動進行這樣的處理。例如,假設有這樣的腳本:

Request.QueryString("message");

這時,顯示結果爲:

This Query String has been  URL encoded

實例14-16:創建虛擬路徑與服務器物理目錄間映射

使用MapPath方法能夠將指定的相對或虛擬路徑映射到服務器上相應的物理目錄上。

語法:

public string MapPath(string path);

參數Path表示指定要映射物理目錄的相對或虛擬路徑。若Path以一個正斜槓(/)或反斜槓(\)開始,則MapPath方法返回路徑時將Path視爲完整的虛擬路徑。若Path不是以斜槓開始,則MapPath方法返回同頁面文件中已有的路徑相對的路徑。這裏須要注意的是,MapPath方法不檢查返回的路徑是否正確或在服務器上是否存在。

對於下列示例,文件data.txt和包含下列腳本的test.aspx文件都位於目錄C:\Inetpub\ wwwroot\aspx下。C:\Inetpub\wwwroot目錄被設置爲服務器的宿主目錄。下列示例使用服務器變量PATH_INFO映射當前文件的物理路徑。如下腳本:

Server.mappth(Request. ServerVariables("PATH_INFO"));

輸出:

c:\inetpub\wwwroot\asp\test.aspx

因爲下列示例中的路徑參數不是以斜槓字符開始的,因此它們被相對映射到當前目錄,此處是目錄C:\Inetpub\wwwroot\aspx。如下腳本:

Server.mappath("data.txt");

Server.mappath("aspx/data.txt");

輸出:

c:\inetpub\wwwroot\aspx\data.txt

c:\inetpub\wwwroot\aspx\aspx\data.txt

14.1.6  Cookie對象

什麼是Cookie呢?Cookie 是一小段文本信息,伴隨着用戶請求和頁面在Web服務器和瀏覽器之間傳遞。用戶每次訪問站點時,Web應用程序均可以讀取Cookie包含的信息。

Cookie跟Session、Application相似,也是用來保存相關信息,但Cookie和其餘對象的最大不一樣是,Cookie將信息保存在客戶端,而Session和Application是保存在服務器端。也就是說,不管什麼時候用戶鏈接到服務器,Web站點均可以訪問cookie信息。這樣,既方便用戶的使用,也方便了網站對用戶的管理。

ASP.NET包含兩個內部Cookie集合。經過HttpRequest的Cookies集合訪問的集合包含經過Cookie標頭從客戶端傳送到服務器的Cookie。經過HttpResponse的Cookies集合訪問的集合包含一些新Cookie,這些Cookie在服務器上建立並以Set-Cookie標頭的形式傳輸到客戶端。

Cookie不是Page類的子類,因此在使用方法上跟Seesion和Application不一樣。

使用Cookie的優勢:

— 可配置到期規則。Cookie 能夠在瀏覽器會話結束時到期,或者能夠在客戶端計算機上無限期存在,這取決於客戶端的到期規則。

— 不須要任何服務器資源。Cookie存儲在客戶端並在發送後由服務器讀取。

— 簡單性。Cookie是一種基於文本的輕量結構,包含簡單的鍵值對。

— 數據持久性。雖然客戶端計算機上Cookie的持續時間取決於客戶端上的Cookie過時處理和用戶干預,Cookie一般是客戶端上持續時間最長的數據保留形式。

使用Cookie的缺點:

— 大小受到限制。大多數瀏覽器對Cookie的大小有4096字節的限制,儘管在當今新的瀏覽器和客戶端設備版本中,支持8192字節的Cookie大小已愈加常見。

— 用戶配置爲禁用。有些用戶禁用了瀏覽器或客戶端設備接收Cookie的能力,所以限制了這一功能。

— 潛在的安全風險。Cookie可能會被篡改。用戶可能會操縱其計算機上的Cookie,這意味着會對安全性形成潛在風險,或者致使依賴於Cookie的應用程序失敗。另外,雖然Cookie只能將它們發送到客戶端的域訪問,歷史上黑客已經發現從用戶計算機上的其餘域訪問Cookie的方法。能夠手動加密和解密Cookie,但這須要額外的編碼,而且由於加密和解密須要耗費必定的時間而影響應用程序的性能。

1.Cookie對象的屬性

Cookie對象的屬性如表14-11所示:

表14-11  Cookie對象的屬性

  

   

  

Name

獲取或設置Cookie的名稱

Cookie的名稱

Value

獲取或設置CookieValue

CookieValue

Expires

獲取或設置Cookie的過時日期和時間

做爲DateTime實例的Cookie過時日期和時間

Version

獲取或設置此Cookie符合的HTTP狀態維護版本

Cookie符合的HTTP狀態維護版本

2.Cookie對象的方法

Cookie對象的方法如表11-12所示:

表14-12  Cookie對象的方法

   

   

Add

新增一個Cookie變量

Clear

清除Cookie集合內的變量

Get

經過變量名或索引獲得Cookie的變量值

GetKey

以索引值來獲取Cookie的變量名稱

Remove

經過Cookie變量名來刪除Cookie變量

實例14-17:設置Cookie

下面的示例將建立名爲「LastVisit」的新Cookie,將該Cookie的值設置爲當前日期和時間,並將其添加到當前Cookie集合中,全部Cookie均經過HTTP輸出流在Set-Cookie頭中發送到客戶端。

HttpCookie MyCookie = new HttpCookie("LastVisit");

DateTime now = DateTime.Now;

MyCookie.Value = now.ToString();

MyCookie.Expires = now.AddHours(1);

Response.Cookies.Add(MyCookie);

運行上面例子,將會在用戶機器的Cookies目錄下創建以下內容的文本文件:

mycookie

LastVisit

儘管上面的這個例子很簡單,但能夠從中擴展許多富有創造性的應用程序。

實例14-18:獲取客戶端發送的Cookie信息

下面的示例是依次經過客戶端發送的全部Cookie,並將每一個Cookie的名稱、過時日期、安全參數和值發送到HTTP輸出。

int loop1, loop2;

HttpCookieCollection MyCookieColl;

HttpCookie MyCookie;

MyCookieColl = Request.Cookies;

//把全部的cookie名放到一個字符數組中

String[] arr1 = MyCookieColl.AllKeys;

//用cookie名獲取單個cookie對象

for (loop1 = 0; loop1 < arr1.Length; loop1++)

{

   MyCookie = MyCookieColl[arr1[loop1]];

   Response.Write("Cookie: " + MyCookie.Name + "<br>");

   Response.Write("Expires: " + MyCookie.Expires + "<br>");

   Response.Write ("Secure:" + MyCookie.Secure + "<br>");

//將單個cookie的值放入一個對象數組

   String[] arr2 = MyCookie.Values.AllKeys;

//遍歷cookie值集合打印全部值 

   for (loop2 = 0; loop2 < arr2.Length; loop2++)

   {

      Response.Write("Value" + loop2 + ": " + arr2[loop2] + "<br>");

   }

14.1.7  Cache對象

對於每一個應用程序域均建立該類的一個實例,而且只要對應的應用程序域保持活動,該實例便保持有效。有關此類實例的信息經過HttpContext對象的Cache屬性或Page對象的Cache屬性來提供。

1.Cache對象的屬性

Cache對象的屬性如表14-13所示:

表14-13  Cache對象的屬性

   

   

  

Count

獲取存儲在緩存中的項數。當監視應用程序性能或使用ASP.NET跟蹤功能時,此屬性可能很是有用

存儲在緩存中的項數

Item

獲取或設置指定鍵處的緩存項

表示緩存項的鍵的String對象

2.Cache對象的方法

Cache對象的方法如表14-14所示:

表14-14  Cache對象的屬性

   

   

Add

將指定項添加到 Cache 對象,該對象具備依賴項、過時和優先級策略,以及一個委託(可用於在從 Cache 移除插入項時通知應用程序)

Get

 Cache 對象檢索指定項

Remove

從應用程序的 Cache 對象移除指定項

Insert

Cache對象插入項。使用此方法的某一版本改寫具備相同key參數的現有Cache

實例14-19:檢索爲ASP.NET文本框服務器控件緩存的值

Get方法能夠從Cache對象檢索指定項,其惟一的參數key表示要檢索的緩存項的標識符。該方法返回檢索到的緩存項,未找到該鍵時爲空引用。

下面的示例展現如何檢索爲ASP.NET文本框服務器控件緩存的值。

Cache.Get("MyTextBox.Value");

實例14-20:移除Cache對象

Remove方法能夠從應用程序的Cache對象移除指定項,其惟一的參數key表示要移除的緩存項的String標識符。該方法返回從Cache移除的項。若是未找到鍵參數中的值,則返回空引用。

下面的示例建立一個RemoveItemFromCache函數。調用此函數時,它使用Item屬性檢查緩存中是否包含與Key1鍵值相關的對象。若是包含,則調用Remove方法來移除該對象。

public void RemoveItemFromCache(Object sender, EventArgs e)

{

    if(Cache["Key1"] != null)

      Cache.Remove("Key1");

}

14.1.8  Global.asax

除了編寫界面代碼外,開發人員還能夠將邏輯和事件處理代碼添加到他們的Web應用程序中。此代碼不處理界面的生成,而且通常不爲響應個別頁請求而被調用。相反,它負責處理更高級別的應用程序事件,如Application_Start,Application_End,Session_Start,Session_End等。開發人員使用位於特定Web應用程序虛擬目錄樹根處的Global.asax文件來創做此邏輯。第一次激活或請求應用程序命名空間內的任何資源或URL時,ASP.NET自動分析該文件並將其編譯成動態.NET框架類(此類擴展了HttpApplication基類)。

第一次激活或請求應用程序命名空間內的任何資源URL時,ASP.NET分析Global.asax文件並將其動態編譯成.NET框架類。Global.asax文件被配置爲自動拒絕任何直接URL請求,從而使外部用戶不能下載或查看內部代碼。

經過在Global.asax文件中創做符合命名模式「Application_EventName(Appropriate EventArgumentSignature)」的方法,開發人員能夠爲HttpApplication基類的事件定義處理程序。例如:

<script language="C#" runat="server">

void Application_Start(object sender, EventArgs e) {

  // Application startup code goes here

}

</script>

若是事件處理代碼須要導入附加的命名空間,能夠在.aspx頁中使用@ import指令,以下所示:

<%@ Import Namespace="System.Text" %>

第一次打開頁時,引起應用程序和會話的Start事件:

void Application_Start(object sender, EventArgs e) {

  // Application startup code goes here

}

void Session_Start(object sender, EventArgs e) {

  Response.Write("Session is Starting...<br>");

  Session.Timeout = 1;

}

對每一個請求都引發BeginRequest和EndRequest事件。刷新頁時,只顯示來自Begin-Request,EndRequest和Page_Load方法的消息。

靜態對象、.NET框架類和COM組件均可以使用對象標記在Global.asax文件中定義。範圍能夠是appinstance,session或application。appinstance範圍表示對象特定於Http-Application的一個實例而且不共享。

<object id="id" runat="server" class=".NET Framework class Name" scope=" appinstance"/>

<object id="id" runat="server" progid="COM ProgID" scope="session"/>

<object id="id" runat="server" classid="COM ClassID" scope="application"/>

請注意,Global.asax使用了微軟的HTML拓展<SCRIPT>標記語法來限制腳本,這也就是說,必須用<SCRIPT>標記來引用這兩個事件而不能用<%和%>符號引用。在Global.asax中不能有任何輸出語句,不管HTM的語法仍是Response.Write方法都是不行的,Global.asax是任何狀況下也不能進行顯示的。

http://book.csdn.net/bookfiles/287/10028712430.shtml

http://www.merecy.cn/article.asp?id=57

http://59.151.28.141:8080/StudentBBS/dispbbs.asp?boardID=47&ID=1245&page=7

網上看到的 很好就貼了過來

相關文章
相關標籤/搜索