HttpWebRequest.CookieContainer 獲取或設置與此請求關聯的 Cookie。默認狀況下CookieContainer 是null
。 html
它是一種數據結構, 它爲Cookie類的實例提供存儲, 並以相似於數據庫的方式訪問。 CookieContainer 具備一個容量限制, 該限制是在建立容器或由屬性更改時設置的。web
Cookie類的實例根據其源 URI 添加到容器中。 它會添加到與 URI CookieCollection關聯的內部。 從基於 URI CookieCollection的容器中檢索, 或者做爲可用於提交 HTTP WebRequests 的字符串從容器中檢索。數據庫
Cookie 有三個屬性, 這些屬性控制容器的內容量: Capacity、 MaxCookieSize和PerDomainCapacity。 CookieContainer 這些值分別爲300、4096和20的默認設置。 當將Cookie添加到容器時,這些屬性用於肯定是否應丟棄CookieContainer中已包含的Cookie以便爲新容器騰出空間。 Cookie 跟蹤每一個加法, 以確保Capacity 不會超過或PerDomainCapacity限制。 CookieContainer 若是超過其中一個或兩個, Cookie則將刪除由CookieContainer保留的實例。 首先, 刪除任何Cookie過時的。 若是必須回收更多的容量, 則會清除最近最少使用CookieCollection的空間。api
出於安全緣由,默認狀況下禁用了 cookie。 若是你想要使用 cookie,則使用CookieContainer屬性,以便啓用 cookie。 安全
下面的代碼示例將請求發送到的 URL,並顯示在響應中返回的 cookie。cookie
1 using System.Net; 2 using System; 3 namespace Examples.System.Net.Cookies 4 { 5 // 此示例在命令行中運行。 6 // 指定一個參數:發送請求的主機的名稱。 7 // 若是請求成功,該示例將顯示主機返回的cookie的內容。 8 9 public class CookieExample 10 { 11 public static void Main(string[] args) 12 { 13 if (args == null || args.Length != 1) 14 { 15 Console.WriteLine("Specify the URL to receive the request."); 16 Environment.Exit(1); 17 } 18 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(args[0]); 19 request.CookieContainer = new CookieContainer(); 20 21 HttpWebResponse response = (HttpWebResponse) request.GetResponse(); 22 23 24 25 // Print the properties of each cookie. 26 foreach (Cookie cook in response.Cookies) 27 { 28 Console.WriteLine("Cookie:"); 29 Console.WriteLine("{0} = {1}", cook.Name, cook.Value); 30 Console.WriteLine("Domain: {0}", cook.Domain); 31 Console.WriteLine("Path: {0}", cook.Path); 32 Console.WriteLine("Port: {0}", cook.Port); 33 Console.WriteLine("Secure: {0}", cook.Secure); 34 35 Console.WriteLine("When issued: {0}", cook.TimeStamp); 36 Console.WriteLine("Expires: {0} (expired? {1})", 37 cook.Expires, cook.Expired); 38 Console.WriteLine("Don't save: {0}", cook.Discard); 39 Console.WriteLine("Comment: {0}", cook.Comment); 40 Console.WriteLine("Uri for comments: {0}", cook.CommentUri); 41 Console.WriteLine("Version: RFC {0}" , cook.Version == 1 ? "2109" : "2965"); 42 43 // Show the string representation of the cookie. 44 Console.WriteLine ("String: {0}", cook.ToString()); 45 } 46 } 47 } 48 } 49 50 // 此示例的輸出將根據指定的主機名而有所不一樣,但將相似於如下內容。 51 /* 52 Cookie: 53 CustomerID = 13xyz 54 Domain: .contoso.com 55 Path: / 56 Port: 57 Secure: False 58 When issued: 1/14/2003 3:20:57 PM 59 Expires: 1/17/2013 11:14:07 AM (expired? False) 60 Don't save: False 61 Comment: 62 Uri for comments: 63 Version: RFC 2965 64 String: CustomerID = 13xyz 65 */