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

來源:互聯網
上載者:User
asp.net|cookie|編程 2Cookie 的限制

  在開始討論 Cookie 的技術細節之前,我想先介紹一下 Cookie 應用的幾條限制。大多數瀏覽器支援最多可達 4096 位元組的 Cookie,如果要將為數不多的幾個值儲存到使用者電腦上,這一空間已經足夠大,但您不能用一個 Cookie 來儲存資料集或其他大量資料。在實際應用中,您可能並不希望在 Cookie 中儲存大量的使用者資訊,而只希望儲存使用者編號或其他標識符。之後,當使用者再次訪問您的網站時,您就可以使用該使用者識別碼 在資料庫中尋找使用者的詳細資料。(有關儲存使用者資訊的說明,請參閱 Cookie 和安全性。)

  瀏覽器還限制了您的網站可以在使用者電腦上儲存的 Cookie 數。大多數瀏覽器只允許每個網站儲存 20 個 Cookie。如果試圖儲存更多的 Cookie,則最先儲存的 Cookie 就會被刪除。還有些瀏覽器會對來自所有網站的 Cookie 總數作出限制,這個限制通常為 300 個。

  您最可能遇到的 Cookie 限制是:使用者可以設定自己的瀏覽器,拒絕接受 Cookie。您很難解決這個問題,除非完全不使用 Cookie 而是通過其他機制來儲存使用者相關資訊。儲存使用者資訊的一種常用方法是工作階段狀態,但工作階段狀態又依賴於 Cookie。這一點在後面的 Cookie 和工作階段狀態中闡述。

  注意:有關狀態管理和 Web 應用程式中用於儲存資訊的選項的詳細資料,請參閱 Introduction to Web Forms State(英文)和 State Management Recommendations(英文)。
更一般的經驗很可能是,儘管 Cookie 在應用程式中非常有用,應用程式也不應該依賴於能夠儲存 Cookie。利用 Cookie 可以做到錦上添花,但不要利用它們來支援關鍵功能。如果您的應用程式必須使用 Cookie,則您可以通過測試來確定瀏覽器是否接受 Cookie。我在本文後面的檢查瀏覽器是否接受 Cookie 一節中簡單介紹了一種測試方法。

  編寫 Cookie

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

  注意:下面要討論的 Response 對象和 Request 對象分別是包含 HttpResponse(英文)和 HttpRequest(英文)類執行個體的頁面的屬性。要在文檔中尋找 Response 和 Request 的資訊,請參閱 HttpResponse 和 HttpRequest 下的內容。

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

  您可能還希望指定 Cookie 的到期日期和時間。Cookie 一般都寫入到使用者的磁碟,然後可能一直都留在磁碟上。因此,您可以指定 Cookie 到期的日期和時間。當使用者再次訪問您的網站時,瀏覽器會先檢查您網站的 Cookie 集合,如果某個 Cookie 已經到期,瀏覽器不會把這個 Cookie 隨頁面請求一起發送給伺服器,而是刪除這個已經到期的 Cookie。(您的網站可能已經在使用者電腦上寫入了多個 Cookie,每個 Cookie 都有各自的到期日期和時間。) 請注意,由瀏覽器負責管理硬碟上的 Cookie,這將影響您在應用程式中對 Cookie 的使用,我很快會介紹這方面的內容。

  一個 Cookie 的有效期間應為多長?這取決於 Cookie 的用途,換句話說,取決於您的應用程式需要 Cookie 值保持有效時間有多長。如果利用 Cookie 統計網站的訪問者,您可以把有效期間設定為 1 年,如果某個使用者已有一年時間未訪問您的網站,則可以把該使用者當作新的訪問者; 如果利用 Cookie 來儲存使用者的喜好設定,則可以把其設定為永遠有效(例如 50 年後到期),因為定期重新設定喜好設定對使用者而言是比較麻煩的。有時,您可能需要編寫在數秒或數分鐘內即到期的 Cookie。在本文後面的檢查瀏覽器是否接受 Cookie 一節中,我列舉了一個樣本,該樣本中建立的 Cookie 的實際有效期間就只有幾秒。

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

  如果沒有設定 Cookie 的有效期間,還是可以建立 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”,另一個稱為“lastVisit”。對於第一個 Cookie,我直接設定了 Response.Cookies 集合的值。您可以使用這種方法向集合中添加值,因為 Response.Cookies 是從 NameObjectCollectionBase(英文)類型的特殊集合派生得到的。

  對於第二個 Cookie,我建立了 Cookie 對象的一個執行個體(HttpCookie [英文] 類型),並設定了其屬性,然後通過 Add 方法把它添加到 Response.Cookies 集合。執行個體化 HttpCookie 對象時,您必須把 Cookie 名稱作為建構函式的一部分進行傳遞。

  這兩個樣本完成了相同的任務,即向瀏覽器寫入一個 Cookie。您要採用哪種方法主要取決於您的個人喜好。您可能會發現第二種方法在設定 Cookie 屬性方面要稍微容易一些,但同時您也會注意到兩者的差別並不是很大。

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

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。