System.Web.HttpCookieCollection 類 和 System.Net.CookieCollection 類

導讀:
  新一篇: 使用 Request.QueryString 接受參數時,跟編碼有關的一些問題
  .Net 提供了兩個Cookie類:
  System.Web.HttpCookie? 類 和 System.Net.Cookie 類
  對應的有兩個Cookie 集合類
  System.Web.HttpCookieCollection 類 和 System.Net.CookieCollection 類
  我們一般來理解他們的區別就是下面簡單的一句:
  System.Web 命名空間下的是給服務器段用的,System.Net 是給客戶端程序用的。
  實際上不止這點區別:
  下面我們來對比這兩個Cookie類的屬性如下,這些屬性都是Copy自MSDN中文版的說明文檔:
  System.Web.HttpCookie? 類 System.Net.Cookie 類
  MSDN中對構造函數的描述:
  已重載。 初始化 HttpCookie 類的新實例。
  MSDN中對構造函數的描述:
  已重載。 根據 Netscape 規範初始化 Cookie 類的新實例。通常,應用程序無需構造 Cookie 類,因爲該類會基於通過 HTTP 響應接收的 Set-Cookie 標頭自動創建。
   Comment?
  獲取或設置服務器可添加到 Cookie 中的註釋。
   CommentUri?
  獲取或設置服務器可通過 Cookie 來提供的 URI 註釋。
   Discard?
  獲取或設置由服務器設置的丟棄標誌。
  Domain
  獲取或設置將此 Cookie 與其關聯的域。
  Domain?
  獲取或設置 Cookie 對其有效的 URI。
   Expired?
  獲取或設置 Cookie 的當前狀態。
  Expires?
  獲取或設置此 Cookie 的過期日期和時間。
  Expires?
  獲取或設置作爲 DateTime 的 Cookie 過期日期和時間。
   HttpOnly?
  確定頁腳本或其他活動內容是否可訪問此 Cookie。
  Name?
  獲取或設置 Cookie 的名稱。
  Name?
  獲取或設置 Cookie 的名稱。
  Path?
  獲取或設置要與當前 Cookie 一起傳輸的虛擬路徑。
  Path?
  獲取或設置此 Cookie 適用於的 URI。
   Port?
  獲取或設置此 Cookie 適用於的 TCP 端口的列表。
  Secure?
  獲取或設置一個值,該值指示是否使用安全套接字層 (SSL)(即僅通過 HTTPS)傳輸 Cookie。
  Secure?
  獲取或設置 Cookie 的安全級別。
   TimeStamp?
  獲取此 Cookie 作爲 DateTime 發出的時間。
  Value?
  獲取或設置單個 Cookie 值。
  Value?
  獲取或設置 Cookie 的 Value。
  Values?
  獲取單個 Cookie 對象所包含的鍵值對的集合。
  Version?
  獲取或設置此 Cookie 符合的 HTTP 狀態維護版本。
  你會看到 System.Net.Cookie 類 比 System.Web.HttpCookie? 類多好些屬性,一些我們WEB開發人員都不清楚的屬性。爲什麼呢?
  這就要從 cookie規範 說起。目前有以下幾種Cookie規範:
  Netscape cookie草案:是最早的cookie規範,基於rfc2109。儘管這個規範與rc2109有較大的差別,但是很多服務器都與之兼容。
  rfc2109, 是w3c發佈的第一個官方cookie規範。理論上講,所有的服務器在處理cookie(版本1)時,都要遵循此規範。遺憾的是,這個規範太嚴格了,以致很多服務器不正確的實施了該規範或仍在使用Netscape規範。
  rfc2965規範定義了cookie版本2,並說明了cookie版本1的不足。
  rfc2965規範的使用,目前並不多。rfc2109規範相應要嚴格得多,在實際應用上,並不是所有的瀏覽器和Web服務器都嚴格遵守。因此相比較而言,Netscape cookie草案倒是一個比較簡潔和被廣泛支持的Cookie規範。
  回過來我們再看System.Web.HttpCookie 類? 和 System.Net.Cookie 類的區別
  我理解的他們的區別應該是:
  System.Web.HttpCookie 類
  這個類最初設計是考慮是WEB服務器用的,由於微軟的WEB服務器並沒有遵循 rfc2109 /rfc2965 規範。而是採用的 Netscape cookie草案方案。
  同時爲了兼顧以前ASP的一些編碼習慣,於是就有了這個類這樣的設計。
  在 dudu 之前的一篇博客中提到的?
  遍歷System.Web.HttpCookieCollection, 會有如下的寫法:
  foreach (string name in Request.Cookies)
  {
   info += string.Format("{0} = {1} /r/n
  ", name, Request.Cookies[name].Value);
  }
  而 foreach(HttpCookie cookie in Request.Cookies)會出錯。 爲何微軟會有這樣的設計就可以理解了。
  
  System.Net.Cookie 類
  這個類最初設計時候應該是考慮主要是客戶端使用的,
  由於考慮到有些服務器的Cookie 是遵循 rfc2109 /rfc2965 規範,所以這個類的設計多了那些屬性。
  
  相關資料:
  System.Net.Cookie和System.Web.HttpCookie有什麼區別
  http://topic.csdn.net/t/20050304/15/3824900.html
  爲什麼foreach(HttpCookie cookie in Request.Cookies)會出錯
  http://www.cnblogs.com/dudu/archive/2004/12/21/80118.html
  HTTP代理如何正確處理Cookie
  http://www.ibm.com/developerworks/cn/java/j-cookie/
  Netscape cookies 草案
  http://wp.netscape.com/eng/mozilla/3.0/handbook/javascript/cookies.htm
  W3C的 rfc2109 規範
  http://www.w3.org/Protocols/rfc2109/rfc2109.txt
  W3C的 rfc2965 規範
  http://www.ietf.org/rfc/rfc2965.txt

本文轉自
http://blog.csdn.net/ghj1976/archive/2007/12/07/1922055.aspx
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章