明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

ASP.NET中Cookie編程的基礎知識(2)

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

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

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

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

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

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

  注意:不要忘記用戶隨時可以刪除自己計算機上的 Cookie,所以即使您保存了長期有效的 Cookie,用戶也可以自行決定將其全部刪除,同時清除保存在 Cookie 中的所有設置。

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

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

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 集合中添加了兩個 Cookie,一個稱為“userName”,另一個稱為“l(fā)astVisit”。對于第一個 Cookie,我直接設置了 Response.Cookies 集合的值。您可以使用這種方法向集合中添加值,因為 Response.Cookies 是從 NameObjectCollectionBase(英文)類型的特殊集合派生得到的。

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

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

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