.net中Cookie的用法


Response.Cookies["name"].Value = name;寫入cookies
TextBox3.Text = Request.Cookies["name"].Value;讀取cookies
Response.Cookies["name"].Expires = DateTime.Now;清空cookies

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.5hui.net

,則前面示例中生成cookie就只能用語路徑爲5hui.net/Application/" target="_blank" rel="external">5hui.net/" target="_blank" rel="external">http://www.5hui.net/Application/的頁面以及該文件夾下

面的所有頁面,而不適用於其他應用程序的頁面,如5hui.net/test/" target="_blank" rel="external">5hui.net/" target="_blank" rel="external">http://www.5hui.net/test/或

5hui.net/" target="_blank" rel="external">http://www.5hui.net/下的頁面。

提示:通過對InternetExplorer和Mozilla瀏覽器進行測試發現,此處使用的路徑是區分大小寫的。一般

而言,Windows 服務器上的URL不區分大小寫,但這種情況例外。您無法控制用戶如何在瀏覽器中輸入URL

,但是,如果您的應用程序依賴於與特定路徑相關的 Cookie,則請確保您所創建的所有超鏈接中的URL與

Path屬性值的大小寫相匹配。

將Cookie的有效範圍限制到域

默認情況下,Cookie與特定的域相關聯。例如,如果您的站點是www.5hui.net,那麼當用戶向該站點

請求頁面時,您編寫的 Cookie就被髮送到服務器。(有特定路徑值的Cookie除外,我在上一節剛剛解釋

過。)如果您的站點有子域(例如contoso.com、sales.5hui.net和support.5hui.net),就可以

把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"]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章