兩個Cookie類

來源:互聯網
上載者:User

.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

 

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.