1.什麼是cookie?
cookie 是一小段文本資訊,伴隨使用者請求,在web伺服器和瀏覽器之間傳遞。使用者每次訪問網站的時候,
web應用程式都可以讀取cookie包含的資訊。
假設在使用者請求您的網站的某個頁面時,您的應用程式不僅是返回請求的頁面。同時也返回一個包含日期
和時間的cookie。使用者的瀏覽器在獲得頁面的同時也獲得了cookie.並且cookie儲存在用戶端的cookie文
件夾中。
2.cookie 的限制
大多數瀏覽器支援最多可達4096位元組(大約4KB)cookie.瀏覽器還限制了,一個網站可以在用戶端儲存
cookie數。大多數瀏覽器允許每個網站最多放20個cookie.如果試圖儲存更多的cookie,那麼先前的cookie
將被刪除。還有些瀏覽器會對來自所有網站cookie總數限制,這個限制通常為300個。
3.cookie 如何建立
在建立cookie的時候要指定幾個值。最初,您要指定cookie的名字和要儲存的值。您也可以建立多個
cookie。但每個cookie的名字必須唯一,以便日後取值時識別。(cookie是按名字儲存的,所以您要建立
兩個名稱相同的cookie,那麼最後那個cookie將覆蓋前一個。)
您也可以給cookie指定到期日期和時間.cookie是寫入到使用者硬碟上的,然後可能一直都留在磁碟上。因
此,您可以指定cookie的到期日期和時間。當使用者下次訪問您的網站的時候,瀏覽器會先檢查您網站的所
有cookie,如果某個cookie已經到期,瀏覽器不會把這個cookie隨頁面請求一起發送給伺服器,而是刪除
這個已經到期的cookie.(您的網站可能已經在使用者磁碟上寫入多個cookie。但個每個cookie的到期日期和
時間不同)。瀏覽器負責磁碟上的cookie,這將影響您的應用程式對cookie的使用
如果沒有設定cookie的有效時間,還是可以建立cookie(我們稱做會話cookie),會話cookie不會儲存到磁
盤上,而是儲存在記憶體中。成為使用者會話資訊的一部分。如果使用者關閉瀏覽器或者會話逾時,該cookie將
被刪除。這種非永久性的cookie.
4.cookie 中的建立方法
您可以通過多種方法建立cookie然後把cookie對象放到Response.Cookies集合中。隨請求頁面一起返回給
瀏覽器。
第一種:
Response.Cookies("cookiename").Value="aaaa"; //建立一個名字為cookiename的cookie.然後在cookie
中儲存的值為aaaa
Response.Cookies("cookiename").Expires=DateTime.Now.AddDays(1);//指定cookie的到期時間為1天
第二種:
HttpCookie acookie=new HttpCookie(cookiename);//HttpCookie類建立cookie然後在構造方法中指定
cookie名稱
還有一種重載建構函式
HttpCookie acookie=new HttpCookes(cookiename,cookievalue);//詳細用法參考MSDN這裡不在講述
//同第一種方法一樣,也要給cookie指定失效時間
acookie.Expires=DateTime.Now.AddDays(1);//失效時間為1天
//acookie.Value="aaaa"; 也可以這樣給cookie賦值
Response.Cookies.Add(acookie);然後寫入到瀏覽器中
注意:在設定cookie有效時間必須為DateTime類型。而為cookie的Value屬性賦值必須為字串類型(不
是字串類型,必須要轉型)因為cookie中的任何值最終都是以字串的形式儲存的。
5.多值cookie(子鍵)
您也可以在一個cookie中儲存多個成對的名稱和數值。成對的名稱和數值也稱作“鍵”或“子鍵”。(如果你熟悉URL,你會發
現子鍵和查詢字串非常相象)。
6.如何建立帶子鍵的cookie ,其實和建立cookie的語句基本相同。我們把上面的例子加以改進
看下面的例子
第一種:
Response.Cookies("cookiename")("cookiechildname")="cookievalue";//
建立一個名字為cookiename的cookie,然後在下面有個子鍵,並給子鍵賦值
是不是合建立一個cookie很相似
Response.Cookies("cookiename").Expires=DateTime.Now.AddDays(1);//
同樣給cookie指定到期日期。和建立一個cookie一樣,指定cookie的名稱就可以
第二種:
HttpCookie acookie=new HttpCookie(cookiename);//同樣建立一個cookie對象
重載那個我就不寫了
acookie.Values["cookiename"]="cookievalue";//在cookie下建立子鍵並賦予值
這個不在是Value而是Values集合屬性。我們知道集合集合可以通過索引訪問的
acookie.Expires=DateTime.Now.AddDays(1);//還是給cookie指定一個失效日期
Response.Cookies.Add(acookie);//把cookie寫入到瀏覽器中
基本上和建立不帶子鍵的cookie很相同,如果想具體瞭解請參考msdn.這裡就不講述了
7.如何控制cookie
預設情況下,一個網站的所有cookie都儲存在用戶端,而且這些cookie都會隨著對網站的發送請求一起發
送到伺服器。也就是說,網站的每個頁面都能得到該網站的所有cookie.
要將cookie限制到伺服器上的某個檔案夾,請按如下方法設定cookie的Path屬性:
HttpCookie acookie=new HttpCookie(cookiename);
acookie.Value="aaaa";
acookie.Expires=DateTime.Now.AddDays(1);
acookie.Path=/Application;
Response.Cookies.Add(acookie);
路徑可以是網站根目錄下的實體路徑,也可以是虛擬根目錄。這樣一來,cookie就只能用語Application
檔案夾或虛擬根目錄中頁面。例如,如果您的網站名為www.gouku.com
,則前面樣本中產生cookie就只能用語路徑為http://www.gouku.com/Application/的頁面以及該檔案夾下
面的所有頁面,而不適用於其他應用程式的頁面,如http://www.gouku.com/test/或
http://www.gouku.com/下的頁面。
提示:通過對InternetExplorer和Mozilla瀏覽器進行測試發現,此處使用的路徑是區分大小寫。一般
而言,Windows 伺服器上的URL不區分大小寫,但這種情況例外。您無法控制使用者如何在瀏覽器中輸入URL
,但是,如果您的應用程式依賴於與特定路徑相關的 Cookie,則請確保您所建立的所有超連結中的URL與
Path屬性值的大小寫相匹配。
將Cookie的有效範圍限制到域
預設情況下,Cookie與特定的域相關聯。例如,如果您的網站是www.contoso.com,那麼當使用者向該網站
請求頁面時,您編寫的 Cookie就被發送到伺服器。(有特定路徑值的Cookie除外,我在上一節剛剛解釋
過。)如果您的網站有子域(例如contoso.com、sales.contoso.com 和support.contoso.com),就可以
把Cookie同特定的子域相關聯。為此,需要設定Cookie的Domain 屬性,如下所示:
Response.Cookies("cookiename").Value=DateTime.Now.ToString
Response.Cookies("cookiename").Expires=DateTime.Now.AddDays(1)
Response.Cookies("cookiename").Domain="support.contoso.com"
如果按照這種方式設定域,則Cookie只能用於指定子域中的頁面。
您也可以利用Domain屬性來建立可在多個子域中共用的Cookie。例如,對域進行如下設定:
Response.Cookies("cookiename").Value=DateTime.Now.ToString
Response.Cookies("cookiename").Expires=DateTime.Now.AddDays(1)
Response.Cookies("cookiename").Domain="contoso.com"
這樣,該Cookie就可用於主域、sales.contoso.com和support.contoso.com
8.如何讀取cookie
當瀏覽器向伺服器發送請求時,該伺服器的cookie和請求頁面一起返回,您可以使用request對象來讀取
cookie.讀取cookie的方法和Response對象寫入cookie的方法非常類似
看下面的例子:
第一種方法:
string info =Request.Cookies["cookiename"].Value;//通過索引來擷取值
是不是和Response.Cookies("cookiename").Value=info很相似
第二種方法
HttpCookie acookie=Request.Cookie("cookiename");//通過Request擷取acookie對象
acookie.Value;//在通過Value屬性擷取值基本上和Response用法相似。
//在擷取cookie之前,應確保該cookie確實存在。否則,您將得到一個system.NullReferenceException
異常。最好在頁面顯示cookie內容之前。用Server.HtmlEncode()方法對cookie內容進行編碼。以確保用
戶沒有cookie中沒有添加
可執行簡本。
9.如何讀取帶子鍵的cookie
與讀取cookie相類似
第一種方法:
string info=Request.Cookie["cookiename"]["cookiechildname"];//與
Response.Cookie["cookiename"]["cookiechildname"]=info
第二種方法:
HttpCookie acookie=Request.Cookie["cookiname"]["cookiechildname"]