程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 總結C#網絡編程中對於Cookie的設定要點

總結C#網絡編程中對於Cookie的設定要點

編輯:關於C語言

花了2天時間,徹底搞清C#中cookie的內容,搞清以下內容將讓你對所有網站的cookIE都盡在掌握之中.

cookieCollection是一個針對一個域所有的cookIE的集合
cookeContainer是一個容器,裡面可以裝多個域的cookIE的集合,即一個

cookieContainer可以包含多個cookIECollection,這個容器可以定義大小,決定

最多裝多少個cookie,如果裝滿了還要再裝,它會自動剔除原來過期的cookIE.

再說到一個cookIE的結構:
CookIE由變量名和值組成,類似Javascript變量。其屬性裡既有標准的CookIE

變量,也有用戶自己創建的變量,屬性中變量是用“變量=值”形式來保存。
  根據Netscape公司的規定,CookIE格式如下:

  Set-CookIE: NAME=VALUE;Expires=DATE;Path=PATH;

Domain=DOMAIN_NAME;SECURE

  NAME=VALUE:

  這是每一個Cookie均必須有的部分。NAME是該CookIE的名稱,VALUE是該

CookIE的值。在字符串“NAME=VALUE”中,不含分號、逗號和空格等
字符。
  Expires=DATE:Expires變量是一個只寫變量,它確定了CookIE有效終止日

期。該屬性值DATE必須以特定的格式來書寫:星期幾,
DD-MM-YY HH:MM:SS GMT,GMT表示這是格林尼治時間。反之,不以這樣的格

式來書寫,系統將無法識別。該變量可省,如果缺省時,
則Cookie的屬性值不會保存在用戶的硬盤中,而僅僅保存在內存當中,CookIE

文件將隨著浏覽器的關閉而自動消失。
  Domain=DOMAIN-NAME:Domain該變量是一個只寫變量,它確定了哪些

Internet域中的Web服務器可讀取浏覽器所存取的CookIE,即只有來自這
個域的頁面才可以使用CookIE中的信息。這項設置是可選的,如果缺省時,設

置CookIE的屬性值為該Web服務器的域名。
  Path=PATH:Path屬性定義了Web服務器上哪些路徑下的頁面可獲取服務器

設置的CookIE。一般如果用戶輸入的URL中的路徑部分從第一個字符
開始包含Path屬性所定義的字符串,浏覽器就認為通過檢查。如果Path屬性的

值為“/”,則Web服務器上所有的WWW資源均可讀取該CookIE。同樣
該項設置是可選的,如果缺省時,則Path的屬性值為Web服務器傳給浏覽器的資

源的路徑名。
  可以看出我們借助對Domain和Path兩個變量的設置,即可有效地控制

CookIE文件被訪問的范圍。
  Secure:在CookIE中標記該變量,表明只有當浏覽器和Web Server之間的

通信協議為加密認證協議時,浏覽器才向服務器提交相應的
CookIE。當前這種協議只有一種,即為HTTPS。
以上的cookIE內容中,真正發送給服務器的內容,只有NAME和VALUE對,其他東西

都是給客戶端的浏覽器用來管理cookIE的,比如是否存放在硬盤上?存放多久?這

浏覽器在訪問哪個網站的時候要發這個cookIE.

這幾個類型的轉換方法:
cookieContainer.GetCookies()獲得cookieCollection,而cookIECollection直

接加索引號獲得某一個具體的cookIE,

cookieContainer.add()可以添加cookie或者cookIECollection,甚至直接用

http的頭中的cookie信息就可以直接往cookieContainer中添加cookIE,用

cookieContainer.SetCookies(Uri, string)來實現,其中的string就是cookie的字符串內容,這個字符串可以通過response.Headers.Get("Set-Cookie")獲得,這裡注意一點,SetCookies()函數中的Uri,不能和cookie字符串中的域名Domain完全相同,比如Uri=new Uri("http://.google.com"),而cookIE中的

Domain=.google.com,這個時候cookieContainer.SetCookIEs()函數將會報錯,

提示域名不正確,解決方法是,uri = new Uri("http://www.google.com")即可,

反正改為其他的類似路徑都可以,為什麼不能相同,誰知道呢,問微軟去.就這個

地方的問題,害我耗了幾個小時.

CookieContainer.GetCookieHeader()函數可以讀出cookIEContainer中所有指

定網站的cookIE,以字符串方式顯示.
自己想要輸入字符串單獨構造cookie,也很簡單,CookIE的構造函數就搞定.

cookIE操作實例

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public class CookIE { /// <summary> /// CookIEs賦值 /// </summary> /// <param name="strName">主鍵</param> /// <param name="strValue">鍵值</param> /// <param name="strDay">有效天數</param> /// <returns></returns> public bool setCookIE(string strName, string strValue, int strDay) { try { HttpCookie CookIE = new HttpCookIE(strName); //Cookie.Domain = ".xxx.com";//當要跨域名訪問的時候,給cookIE指定域名即可,格式為.xxx.com CookIE.Expires = DateTime.Now.AddDays(strDay); CookIE.Value = strValue; System.Web.HttpContext.Current.Response.Cookies.Add(CookIE); return true; } catch { return false; } } /// <summary> /// 讀取CookIEs /// </summary> /// <param name="strName">主鍵</param> /// <returns></returns> public string getCookIE(string strName) { HttpCookie Cookie = System.Web.HttpContext.Current.Request.CookIEs[strName]; if (CookIE != null) { return CookIE.Value.ToString(); } else { return null; } } /// <summary> /// 刪除CookIEs /// </summary> /// <param name="strName">主鍵</param> /// <returns></returns> public bool delCookIE(string strName) { try { HttpCookie CookIE = new HttpCookIE(strName); //Cookie.Domain = ".xxx.com";//當要跨域名訪問的時候,給cookIE指定域名即可,格式為.xxx.com CookIE.Expires = DateTime.Now.AddDays(-1); System.Web.HttpContext.Current.Response.Cookies.Add(CookIE); return true; } catch { return false; } } }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved