飛艷小屋

          程序--人生--哲學___________________歡迎艷兒的加入

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            52 Posts :: 175 Stories :: 107 Comments :: 0 Trackbacks

          C# 中的 cookie 編程
           
          作者:邱燕菱    文章來源:本站原創(chuàng)    點擊數(shù):    更新時間:2005-11-8
           
          Cookie就是所謂的“小甜餅“ ,他最早出現(xiàn)是在Netscape Navigator 2.0中。Cookie其實就是由Web服務器創(chuàng)建的、將信息存儲在計算機上的文件。那么為什么Web服務器要在客戶機上面創(chuàng)建如此文件?這是因為當客戶機發(fā)送一個請求到WEB服務器時(譬如準備瀏覽頁面時),無論此客戶機是否是第一次來訪,服務器都會把它當作第一次來對待,WEB服務器所做的工作只是簡單的進行響應,然后就關閉與該用戶的連接。這樣處理過程所帶來的缺點時顯而易見的。自從網(wǎng)景公司開發(fā)出Cookie以后,就可以利用Cookie來保存用戶的識別信息。Cookie的作用可以記錄了您在該站點上曾經(jīng)訪問過的頁面,由此幫助您下次訪問該站點時自定義查看。Cookies 也可以存儲個人可識別信息。個人可識別信息是可以用來識別或聯(lián)系您的信息,例如姓名、電子郵件地址、家庭或工作地址,或者電話號碼。然而,網(wǎng)站只能訪問您提供的個人可識別信息。例如,除非您提供電子郵件名稱,否則網(wǎng)站將不能確定您的電子郵件名稱。另外,網(wǎng)站不能通過Cookie來訪問計算機上的其他信息。當然除非你提供。那么Cookie到底存放在什么地方?如果機器的系統(tǒng)是視窗98且安裝在“ C“ 盤中,那么Cookie存放在“ C:\Windows\Cookies“ 目錄中;如果機器系統(tǒng)是視窗2000且安裝在“ C“ 盤中,那么Cookie存放在“ C:\Documents and Settings\Administrator\Cookies“ 目錄中。了解了Cookie這么多知識,我們還是來了解一下本文的重點-- C#是如何進行Cookie方面編程的。主要內容有二點:其一是 C#是如何寫入Cookie;其二是 C#是如何訪問自己寫入的Cookie。

          一、本文介紹的程序設計和運行的軟件環(huán)境:

          微軟公司視窗2000服務器版
          .Net FrameWork SDK Beta 2

          C#進行Cookie方面編程是通過ASP.NET頁面來實現(xiàn)的。

          二、C#如何寫入Cookie:

          為了寫入Cookie,他的步驟主要有三步,具體如下:

          首先就要創(chuàng)建一個HttpCookie對象,通過這個對象來構造一個Cookie,這個對象的名稱就是以后產(chǎn)生的Cookie名稱。具體如下代碼:
          HttpCookie cookie = new HttpCookie ( “ 用戶定義的Cookie名稱“ ) ;

          然后對創(chuàng)建的HttpCookie對象的“ Value“ 屬性分配一個字符串值,“ Value“ 的值就是后來產(chǎn)生的Cookie的值。具體代碼如下:
          cookie.Value = “用戶給Cookie賦值“ ; 如果你想寫入的Cookie數(shù)值不是一個簡單的字符串,而是一個復雜的數(shù)據(jù)類型,我們知道這些數(shù)據(jù)類型是不能直接存貯到Cookie中的,因為Cookie中只能存貯字符串。但你可以通過一個變通的方法,就是把這個復雜的數(shù)據(jù)類型轉換成多個字符串,然后把這多個字符串同時賦值給產(chǎn)生的Cookie值,這樣Cookie中的內容就豐富了,以后利用Cookie完成的功能也強大了。這時你可能就會明白為什么當你瀏覽Web服務器,Web服務器會知道你什么時候曾經(jīng)瀏覽過,并且曾經(jīng)待過多長時間等信息了。因為這些信息已經(jīng)存儲到你第一次瀏覽頁面時,Web服務器產(chǎn)生的Cookie中去了。下列代碼是把多個字符串存儲到Cookie的例子:
          cookie [ “ 姓名“ ] = “ 王天“;
          cookie [ “ 性別“ ] = “ 男“;
          cookie [ “ 年齡“ ] = “ 26“;

          Cookie有臨時的,也有永遠的。永久 Cookie 以文件形式存儲在計算機上,關閉 Internet Explorer 時仍然保留在計算機上。再次訪問該站點時,創(chuàng)建該 Cookie 的網(wǎng)站可以讀取。在具體的編程時候,是在寫入此Cookie的時候,設定Cookie的生命周期,具體如下代碼:
          DateTime dtNow = DateTime . Now ;
          TimeSpan tsMinute = new TimeSpan ( 0 , 1 , 0 , 0 ) ;
          cookie . Expires = dtNow + tsMinute ;

          以上代碼是設定產(chǎn)生的Cookie的生命期為“ 一個小時“ ,你可以通過修改“ TimeSpan“ 屬性來設定產(chǎn)生Cookie的具體生命期。
          .最后調用“ Response.Cookies“ 對象的“ Add()“ 方法,加入此對象,這樣就可以產(chǎn)生一個Cookie了。具體代碼如下:
          Response . Cookies . Add ( cookie ) ;
          下列代碼就是在 C#寫入Cookie的完整代碼(Write.aspx):
          〈% @ language = “C#“ %〉
          〈script runat = “server“ 〉
          void WriteClicked ( Object Sender , EventArgs e )
          {
          //創(chuàng)建一個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創(chuàng)建完畢 〈br 〉 〈hr 〉 “ ) ;
          }
          〈/script 〉
          〈html 〉
          〈body 〉
          〈h3 〉 在 C#頁面中創(chuàng)建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 = “創(chuàng)建Cookie“ onclick = “WriteClicked“ runat = “server“ /〉 〈br 〉
          〈/form 〉
          〈/body 〉
          〈/html 〉

          當然上面的代碼產(chǎn)生的Cookie在內容上面有點單調了。其實對于內容十分豐富的Cookie來說,他還有許多屬性,充分的利用這些屬性,才可以利用了Cookie的強大功能。下表是Cookie的一些常用的屬性:

          屬性 描述
          Domain 設定/獲得Cookie應屬于的域名。一旦設定了此屬性,則只限定于此域名的Web服務器訪問此Cookie。可以設定為“ccw.com.cn“
          Path 設定/獲得Cookie應屬于的路徑,如果設定后,則訪問此Cookie的Web頁面則被限定在此路徑里面。其他路徑的Web頁面則不能訪問。
          Secure 設定/獲得一個標識來表明利用HTTP協(xié)議是否能夠安全的傳輸Cookie到客戶端的瀏覽器。
          HasKeys 表明是否此Cookie是否是多個字符串組成的。

          在寫入Cookie的時候,最大限度的利用這些屬性,對于最大程度的利用寫入的Cookie是十分重要的。

          三、C#是如何讀取已產(chǎn)生的Cookie:

          讀取指定的Cookie比起寫入Cookie要來的容易的多了,只需要使用“ Request.Cookies“ 對象就可以完成。下面是讀取指定Cookie名稱的方法:

          HttpCookie cookie = Request.Cookies [ “ Cookie的名稱“ ] ;

          下面是顯示已經(jīng)讀取了的Cookie的數(shù)值:

          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 ( “沒有發(fā)現(xiàn)指定的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 〉

          四、總結:

          至此我們已經(jīng)介紹了用 C#進行Cookie編程的大部分內容。其實Cookie在互聯(lián)網(wǎng)上有著比較大的作用。譬如它可讓WEB站點跟蹤特定訪問者的訪問次數(shù)、最后訪問時間和訪問者進入站點的路徑等;還可告訴在線廣告商廣告被點擊的次數(shù),從而可以更精確的投放廣告;它可讓用戶在不鍵入密碼和用戶名的情況下進入曾經(jīng)瀏覽過的一些站點;最為重要的是它可幫助站點統(tǒng)計用戶資料以實現(xiàn)個性化服務等等。掌握了 C#的Cookie編程,就可以在程序中充分利用Cookie來實現(xiàn)上面的這些功能了。不信你試一試。 

          posted on 2005-11-14 21:36 天外飛仙 閱讀(278) 評論(0)  編輯  收藏 所屬分類: .net
          主站蜘蛛池模板: 隆尧县| 惠东县| 长顺县| 内黄县| 南通市| 乌什县| 绥滨县| 阿合奇县| 政和县| 罗定市| 安宁市| 红桥区| 浠水县| 彭州市| 太仆寺旗| 潜山县| 岳阳市| 夏邑县| 绥化市| 潍坊市| 湖州市| 屏边| 贞丰县| 同德县| 湖北省| 昌都县| 从江县| 上犹县| 瓮安县| 扎兰屯市| 镇巴县| 公主岭市| 正镶白旗| 广安市| 望江县| 白玉县| 襄垣县| 阳东县| 阿图什市| 丰台区| 武乡县|