明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

ASP.NET中Cookie編程的基礎(chǔ)知識(shí)(2)

[摘要]編寫(xiě) Cookie  您可以利用頁(yè)面的 Response(英文)屬性來(lái)編寫(xiě) Cookie,該屬性提供的對(duì)象使用戶(hù)可以將信息添加到由頁(yè)面向?yàn)g覽器呈現(xiàn)的信息中。Response 對(duì)象支持一個(gè)名為 Cookies(英文)的集合,您可以向其中添加要寫(xiě)入瀏覽器的 Cookie。  注意:下面要討論的 Res...
編寫(xiě) Cookie

  您可以利用頁(yè)面的 Response(英文)屬性來(lái)編寫(xiě) Cookie,該屬性提供的對(duì)象使用戶(hù)可以將信息添加到由頁(yè)面向?yàn)g覽器呈現(xiàn)的信息中。Response 對(duì)象支持一個(gè)名為 Cookies(英文)的集合,您可以向其中添加要寫(xiě)入瀏覽器的 Cookie。

  注意:下面要討論的 Response 對(duì)象和 Request 對(duì)象分別是包含 HttpResponse(英文)和 HttpRequest(英文)類(lèi)實(shí)例的頁(yè)面的屬性。要在文檔中查找 Response 和 Request 的信息,請(qǐng)參閱 HttpResponse 和 HttpRequest 下的內(nèi)容。

  在創(chuàng)建 Cookie 時(shí),您需要指定幾個(gè)值。最初,您要指定 Cookie 的名稱(chēng)和其中保存的值。您可以創(chuàng)建多個(gè) Cookie,每個(gè) Cookie 都必須具有唯一的名稱(chēng),以便日后讀取時(shí)識(shí)別。(Cookie 是按名稱(chēng)保存的,所以如果您創(chuàng)建了兩個(gè)名稱(chēng)相同的 Cookie,后保存的那一個(gè)將覆蓋前一個(gè)。)

  您可能還希望指定 Cookie 的過(guò)期日期和時(shí)間。Cookie 一般都寫(xiě)入到用戶(hù)的磁盤(pán),然后可能一直都留在磁盤(pán)上。因此,您可以指定 Cookie 過(guò)期的日期和時(shí)間。當(dāng)用戶(hù)再次訪問(wèn)您的站點(diǎn)時(shí),瀏覽器會(huì)先檢查您站點(diǎn)的 Cookie 集合,如果某個(gè) Cookie 已經(jīng)過(guò)期,瀏覽器不會(huì)把這個(gè) Cookie 隨頁(yè)面請(qǐng)求一起發(fā)送給服務(wù)器,而是刪除這個(gè)已經(jīng)過(guò)期的 Cookie。(您的站點(diǎn)可能已經(jīng)在用戶(hù)計(jì)算機(jī)上寫(xiě)入了多個(gè) Cookie,每個(gè) Cookie 都有各自的過(guò)期日期和時(shí)間。) 請(qǐng)注意,由瀏覽器負(fù)責(zé)管理硬盤(pán)上的 Cookie,這將影響您在應(yīng)用程序中對(duì) Cookie 的使用,我很快會(huì)介紹這方面的內(nèi)容。

  一個(gè) Cookie 的有效期應(yīng)為多長(zhǎng)?這取決于 Cookie 的用途,換句話說(shuō),取決于您的應(yīng)用程序需要 Cookie 值保持有效的時(shí)間有多長(zhǎng)。如果利用 Cookie 統(tǒng)計(jì)網(wǎng)站的訪問(wèn)者,您可以把有效期設(shè)置為 1 年,如果某個(gè)用戶(hù)已有一年時(shí)間未訪問(wèn)您的站點(diǎn),則可以把該用戶(hù)當(dāng)作新的訪問(wèn)者; 如果利用 Cookie 來(lái)保存用戶(hù)的首選項(xiàng),則可以把其設(shè)置為永遠(yuǎn)有效(例如 50 年后到期),因?yàn)槎ㄆ谥匦略O(shè)置首選項(xiàng)對(duì)用戶(hù)而言是比較麻煩的。有時(shí),您可能需要編寫(xiě)在數(shù)秒或數(shù)分鐘內(nèi)即過(guò)期的 Cookie。在本文后面的檢查瀏覽器是否接受 Cookie 一節(jié)中,我列舉了一個(gè)示例,該示例中創(chuàng)建的 Cookie 的實(shí)際有效期就只有幾秒。

  注意:不要忘記用戶(hù)隨時(shí)可以刪除自己計(jì)算機(jī)上的 Cookie,所以即使您保存了長(zhǎng)期有效的 Cookie,用戶(hù)也可以自行決定將其全部刪除,同時(shí)清除保存在 Cookie 中的所有設(shè)置。

  如果沒(méi)有設(shè)置 Cookie 的有效期,還是可以創(chuàng)建 Cookie,但它不會(huì)保存到用戶(hù)的硬盤(pán)上,而是會(huì)成為用戶(hù)會(huì)話信息的一部分。如果用戶(hù)關(guān)閉瀏覽器或會(huì)話超時(shí),該 Cookie 就會(huì)被刪除。這種非永久性的 Cookie 很適合用來(lái)保存只需短時(shí)間保存的信息,或者保存由于安全原因不應(yīng)該寫(xiě)入客戶(hù)計(jì)算機(jī)磁盤(pán)的信息。例如,如果用戶(hù)使用的是一臺(tái)公用計(jì)算機(jī),而您不希望把 Cookie 寫(xiě)入這種計(jì)算機(jī)的磁盤(pán)上,這時(shí)就可以使用非永久性的 Cookie。

  您可以通過(guò)多種方法把 Cookie 添加到 Response.Cookies 集合中。以下示例介紹了兩種完成此任務(wù)的方法:

Response.Cookies("userName").Value = "mike"
Response.Cookies("userName").Expires = DateTime.Now.AddDays(1)

Dim aCookie As New HttpCookie("lastVisit")
aCookie.Value = DateTime.Now.ToString
aCookie.Expires = DateTime.Now.AddDays(1)
Response.Cookies.Add(aCookie) 

  該示例向 Cookies 集合中添加了兩個(gè) Cookie,一個(gè)稱(chēng)為“userName”,另一個(gè)稱(chēng)為“l(fā)astVisit”。對(duì)于第一個(gè) Cookie,我直接設(shè)置了 Response.Cookies 集合的值。您可以使用這種方法向集合中添加值,因?yàn)?Response.Cookies 是從 NameObjectCollectionBase(英文)類(lèi)型的特殊集合派生得到的。

  對(duì)于第二個(gè) Cookie,我創(chuàng)建了 Cookie 對(duì)象的一個(gè)實(shí)例(HttpCookie [英文] 類(lèi)型),并設(shè)置了其屬性,然后通過(guò) Add 方法把它添加到 Response.Cookies 集合。實(shí)例化 HttpCookie 對(duì)象時(shí),您必須把 Cookie 名稱(chēng)作為構(gòu)造函數(shù)的一部分進(jìn)行傳遞。

  這兩個(gè)示例完成了相同的任務(wù),即向?yàn)g覽器寫(xiě)入一個(gè) Cookie。您要采用哪種方法主要取決于您的個(gè)人喜好。您可能會(huì)發(fā)現(xiàn)第二種方法在設(shè)置 Cookie 屬性方面要稍微容易一些,但同時(shí)您也會(huì)注意到兩者的差別并不是很大。

  在這兩種方法中,有效期值必須為 DateTime 類(lèi)型。而“l(fā)astVisited”值也是日期/時(shí)間值。但在這種情況下,我必須把日期/時(shí)間值轉(zhuǎn)換為字符串,因?yàn)?Cookie 中的任何值最終都是以字符串的形式保存的。