Net 提供了兩個Cookie類:
System.Web.HttpCookie 類 和 System.Net.Cookie 類
對應的有兩個Cookie 集合類
System.Web.HttpCookieCollection 類 和 System.Net.CookieCollection 類
我們一般來理解他們的區(qū)別就是下面簡單的一句:
System.Web 命名空間下的是給服務器段用的,System.Net 是給客戶端程序用的。
實際上不止這點區(qū)別:
下面我們來對比這兩個Cookie類的屬性如下,這些屬性都是Copy自MSDN中文版的說明文檔:
System.Web.HttpCookie 類 System.Net.Cookie 類
MSDN中對構造函數(shù)的描述:
已重載。 初始化 HttpCookie 類的新實例。 MSDN中對構造函數(shù)的描述:
已重載。 根據(jù) Netscape 規(guī)范初始化 Cookie 類的新實例。通常,應用程序無需構造 Cookie 類,因為該類會基于通過 HTTP 響應接收的 Set-Cookie 標頭自動創(chuàng)建。
Comment
獲取或設置服務器可添加到 Cookie 中的注釋。
CommentUri
獲取或設置服務器可通過 Cookie 來提供的 URI 注釋。
Discard
獲取或設置由服務器設置的丟棄標志。
Domain
獲取或設置將此 Cookie 與其關聯(lián)的域。
Domain
獲取或設置 Cookie 對其有效的 URI。
Expired
獲取或設置 Cookie 的當前狀態(tài)。
Expires
獲取或設置此 Cookie 的過期日期和時間。
Expires
獲取或設置作為 DateTime 的 Cookie 過期日期和時間。
HttpOnly
確定頁腳本或其他活動內(nèi)容是否可訪問此 Cookie。
Name
獲取或設置 Cookie 的名稱。
Name
獲取或設置 Cookie 的名稱。
Path
獲取或設置要與當前 Cookie 一起傳輸?shù)奶摂M路徑。
Path
獲取或設置此 Cookie 適用于的 URI。
Port
獲取或設置此 Cookie 適用于的 TCP 端口的列表。
Secure
獲取或設置一個值,該值指示是否使用安全套接字層 (SSL)(即僅通過 HTTPS)傳輸 Cookie。
Secure
獲取或設置 Cookie 的安全級別。
TimeStamp
獲取此 Cookie 作為 DateTime 發(fā)出的時間。
Value
獲取或設置單個 Cookie 值。
Value
獲取或設置 Cookie 的 Value。
Values
獲取單個 Cookie 對象所包含的鍵值對的集合。
Version
獲取或設置此 Cookie 符合的 HTTP 狀態(tài)維護版本。
你會看到 System.Net.Cookie 類 比 System.Web.HttpCookie 類多好些屬性,一些我們WEB開發(fā)人員都不清楚的屬性。為什么呢?
這就要從 cookie規(guī)范 說起。目前有以下幾種Cookie規(guī)范:
Netscape cookie草案:是最早的cookie規(guī)范,基于rfc2109。盡管這個規(guī)范與rc2109有較大的差別,但是很多服務器都與之兼容。 rfc2109, 是w3c發(fā)布的第一個官方cookie規(guī)范。理論上講,所有的服務器在處理cookie(版本1)時,都要遵循此規(guī)范。遺憾的是,這個規(guī)范太嚴格了,以致很多服務器不正確的實施了該規(guī)范或仍在使用Netscape規(guī)范。 rfc2965規(guī)范定義了cookie版本2,并說明了cookie版本1的不足。
rfc2965規(guī)范的使用,目前并不多。rfc2109規(guī)范相應要嚴格得多,在實際應用上,并不是所有的瀏覽器和Web服務器都嚴格遵守。因此相比較而言,Netscape cookie草案倒是一個比較簡潔和被廣泛支持的Cookie規(guī)范。
回過來我們再看 System.Web.HttpCookie 類 和 System.Net.Cookie 類的區(qū)別
我理解的他們的區(qū)別應該是:
System.Web.HttpCookie 類
這個類最初設計是考慮是WEB服務器用的,由于微軟的WEB服務器并沒有遵循 rfc2109 \rfc2965 規(guī)范。而是采用的 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 規(guī)范,所以這個類的設計多了那些屬性。
http://www.evget.com/zh-CN/Info/ReadNews.aspx?id=8557 Cookies 加密
http://www.it86.cc/dotnet/2008/0311/12275.shtml相關資料:
System.Net.Cookie和System.Web.HttpCookie有什么區(qū)別
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.htmlHTTP代理如何正確處理Cookie
http://www.ibm.com/developerworks/cn/java/j-cookie/Netscape cookies 草案
http://wp.netscape.com/eng/mozilla/3.0/handbook/javascript/cookies.htmW3C的 rfc2109 規(guī)范
http://www.w3.org/Protocols/rfc2109/rfc2109.txt通用的javascript-js操作cookie的類
http://blog.csdn.net/junval/archive/2008/01/22/2059529.aspxW3C的 rfc2965 規(guī)范
http://www.ietf.org/rfc/rfc2965.txt另:ASP.NET(C#)實現(xiàn)一次性上傳多張圖片(多個文件)
http://www.diybl.com/course/4_webprogram/asp.net/netjs/2007111/81575.html轉自: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1922055