Cookie就是所謂的" 小甜餅" ,他最早出現是在Netscape Navigator 2.0中。CookIE其實就是由Web服務器創建的、將信息存儲在計算機上的文件。那麼為什麼Web服務器要在客戶機上面創建如此文件?這是因為當客戶機發送一個請求到WEB服務器時(譬如准備浏覽頁面時),無論此客戶機是否是第一次來訪,服務器都會把它當作第一次來對待,WEB服務器所做的工作只是簡單的進行響應,然後就關閉與該用戶的連接。這樣處理過程所帶來的缺點時顯而易見的。自從網景公司開發出Cookie以後,就可以利用Cookie來保存用戶的識別信息。Cookie的作用可以記錄了您在該站點上曾經訪問過的頁面,由此幫助您下次訪問該站點時自定義查看。CookIEs 也可以存儲個人可識別信息。個人可識別信息是可以用來識別或聯系您的信息,例如姓名、電子郵件地址、家庭或工作地址,或者電話號碼。然而,網站只能訪問您提供的個人可識別信息。例如,除非您提供電子郵件名稱,否則網站將不能確定您的電子郵件名稱。另外,網站不能通過Cookie來訪問計算機上的其他信息。當然除非你提供。那麼Cookie到底存放在什麼地方?如果機器的系統是視窗98且安裝在" C" 盤中,那麼Cookie存放在" C:\Windows\Cookies" 目錄中;如果機器系統是視窗2000且安裝在" C" 盤中,那麼Cookie存放在" C:\Documents and Settings\Administrator\Cookies" 目錄中。了解了Cookie這麼多知識,我們還是來了解一下本文的重點-- C#是如何進行Cookie方面編程的。主要內容有二點:其一是 C#是如何寫入Cookie;其二是 C#是如何訪問自己寫入的CookIE。
一、本文介紹的程序設計和運行的軟件環境:
微軟公司視窗2000服務器版
.Net FrameWork SDK Beta 2
C#進行CookIE方面編程是通過ASP.Net頁面來實現的。
二、C#如何寫入CookIE:
為了寫入CookIE,他的步驟主要有三步,具體如下:
首先就要創建一個HttpCookie對象,通過這個對象來構造一個Cookie,這個對象的名稱就是以後產生的CookIE名稱。具體如下代碼:
HttpCookie cookie = new HttpCookie ( " 用戶定義的CookIE名稱" ) ;
然後對創建的HttpCookie對象的" Value" 屬性分配一個字符串值," Value" 的值就是後來產生的CookIE的值。具體代碼如下:
cookie.Value = "用戶給Cookie賦值" ; 如果你想寫入的Cookie數值不是一個簡單的字符串,而是一個復雜的數據類型,我們知道這些數據類型是不能直接存貯到Cookie中的,因為Cookie中只能存貯字符串。但你可以通過一個變通的方法,就是把這個復雜的數據類型轉換成多個字符串,然後把這多個字符串同時賦值給產生的Cookie值,這樣Cookie中的內容就豐富了,以後利用CookIE完成的功能也強大了。這時你可能就會明白為什麼當你浏覽Web服務器,Web服務器會知道你什麼時候曾經浏覽過,並且曾經待過多長時間等信息了。因為這些信息已經存儲到你第一次浏覽頁面時,Web服務器產生的CookIE中去了。下列代碼是把多個字符串存儲到CookIE的例子:
cookIE [ " 姓名" ] = " 王天";
cookIE [ " 性別" ] = " 男";
cookIE [ " 年齡" ] = " 26";
Cookie有臨時的,也有永遠的。永久 CookIE 以文件形式存儲在計算機上,關閉 Internet Explorer 時仍然保留在計算機上。再次訪問該站點時,創建該 Cookie 的網站可以讀取。在具體的編程時候,是在寫入此Cookie的時候,設定CookIE的生命周期,具體如下代碼:
DateTime dtNow = DateTime . Now ;
TimeSpan tsMinute = new TimeSpan ( 0 , 1 , 0 , 0 ) ;
cookIE . Expires = dtNow + tsMinute ;
以上代碼是設定產生的Cookie的生命期為" 一個小時" ,你可以通過修改" TimeSpan" 屬性來設定產生CookIE的具體生命期。
.最後調用" Response.Cookies" 對象的" Add()" 方法,加入此對象,這樣就可以產生一個CookIE了。具體代碼如下:
Response . Cookies . Add ( cookIE ) ;
下列代碼就是在 C#寫入CookIE的完整代碼(Write.ASPx):
<% @ language = "C#" %>
<script runat = "server" >
void WriteClicked ( Object Sender , EventArgs e )
{
//創建一個HttpCookIE對象
HttpCookie cookie = new HttpCookie ( NameFIEld . Text ) ;
//設定此cookIEs值
cookie . Value = ValueFIEld . Text ;
//設定cookIE的生命周期,在這裡定義為一個小時
DateTime dtNow = DateTime . Now ;
TimeSpan tsMinute = new TimeSpan ( 0 , 1 , 0 , 0 ) ;
cookIE . Expires = dtNow + tsMinute ;
cookIE [ "姓名" ] = "王天" ;
cookIE [ "性別" ] = "男" ;
cookIE [ "年齡" ] = "26" ;
//加入此cookIE
Response . Cookies . Add ( cookIE ) ;
Response . Write ( NameField . Text + "CookIE創建完畢 <br > <hr > " ) ;
}
</script >
<Html >
<body >
<h3 > 在 C#頁面中創建cookIE </h3 >
此cookIE的生命周期定義為一個小時
<form runat ="server">
CookIE名稱:<ASP:textbox id = "NameFIEld" runat = "server" /> <br >
CookIE的值:<ASP:textbox id = "ValueFIEld" runat = "server" /> <br >
<ASP:button text = "創建CookIE" onclick = "WriteClicked" runat = "server" /> <br >
</form >
</body >
</Html >
下圖是上面代碼運行後的界面:
圖01:C#寫入CookIE的程序運行界面
當然上面的代碼產生的Cookie在內容上面有點單調了。其實對於內容十分豐富的Cookie來說,他還有許多屬性,充分的利用這些屬性,才可以利用了Cookie的強大功能。下表是CookIE的一些常用的屬性:
屬性 描述
Domain 設定/獲得CookIE應屬於的域名。一旦設定了此屬性,則只限定於此域名的Web服務器訪問此CookIE。可以設定為"ccw.com.cn"
Path 設定/獲得Cookie應屬於的路徑,如果設定後,則訪問此CookIE的Web頁面則被限定在此路徑裡面。其他路徑的Web頁面則不能訪問。
Secure 設定/獲得一個標識來表明利用HTTP協議是否能夠安全的傳輸CookIE到客戶端的浏覽器。
HasKeys 表明是否此CookIE是否是多個字符串組成的。
在寫入Cookie的時候,最大限度的利用這些屬性,對於最大程度的利用寫入的CookIE是十分重要的。
三、C#是如何讀取已產生的CookIE:
讀取指定的Cookie比起寫入Cookie要來的容易的多了,只需要使用" Request.Cookies" 對象就可以完成。下面是讀取指定CookIE名稱的方法:
HttpCookie cookie = Request.Cookies [ " CookIE的名稱" ] ;
下面是顯示已經讀取了的CookIE的數值:
Response.Write (cookie. Value . ToString ( ) ) ; 掌握了上面的要點,讀取Cookie就顯得非常容易了,下列是讀取CookIE的程序代碼(read.ASPx): <% @ language = "C#" %>
<script runat = "server" >
void ReadClicked ( Object Sender , EventArgs e )
{
//得到用戶輸入的cookIE名稱
String strCookieName = NameFIEld . Text ;
//獲得cookIE
HttpCookie cookie = Request.Cookies [ strCookIEName ] ;
//確定是否存在用戶輸入的cookIE
if ( null == cookIE ) {
Response.Write ( "沒有發現指定的cookIE <br > <hr > " ) ;
}
else {
//找到指定的cookie,顯示cookIE的值
String strCookieValue = cookIE . Value . ToString ( ) ;
Response.Write ( strCookieName + " cookIE 的值為: <b > "
+ strCookIEValue + " </b > <br > <hr > " ) ;
}
}
</script >
<Html >
<body >
在 C#頁面中讀取指定CookIE值<br >
<form runat = "server" >
請輸入要讀取的CookIE名稱:<ASP:textbox id = "NameFIEld" runat = "server" />
<ASP:button text = "讀取cookIE" onclick = "ReadClicked" runat = "server" />
</form >
</body >
</Html >
下圖是上面代碼運行後的界面:
圖02:讀取指定CookIE的值的程序運行界面
四、總結:
至此我們已經介紹了用 C#進行Cookie編程的大部分內容。其實Cookie在互聯網上有著比較大的作用。譬如它可讓WEB站點跟蹤特定訪問者的訪問次數、最後訪問時間和訪問者進入站點的路徑等;還可告訴在線廣告商廣告被點擊的次數,從而可以更精確的投放廣告;它可讓用戶在不鍵入密碼和用戶名的情況下進入曾經浏覽過的一些站點;最為重要的是它可幫助站點統計用戶資料以實現個性化服務等等。掌握了 C#的Cookie編程,就可以在程序中充分利用CookIE來實現上面的這些功能了。不信你試一試。