總結(jié)C#網(wǎng)絡(luò)編程中對(duì)于Cookie的設(shè)定要點(diǎn)
花了2天時(shí)間,徹底搞清C#中cookie的內(nèi)容,搞清以下內(nèi)容將讓你對(duì)所有網(wǎng)站的cookie都盡在掌握之中.
cookieCollection是一個(gè)針對(duì)一個(gè)域所有的cookie的集合
cookeContainer是一個(gè)容器,里面可以裝多個(gè)域的cookie的集合,即一個(gè)
cookieContainer可以包含多個(gè)cookieCollection,這個(gè)容器可以定義大小,決定
最多裝多少個(gè)cookie,如果裝滿了還要再裝,它會(huì)自動(dòng)剔除原來(lái)過(guò)期的cookie.
再說(shuō)到一個(gè)cookie的結(jié)構(gòu):
Cookie由變量名和值組成,類似Javascript變量。其屬性里既有標(biāo)準(zhǔn)的Cookie
變量,也有用戶自己創(chuàng)建的變量,屬性中變量是用“變量=值”形式來(lái)保存。
根據(jù)Netscape公司的規(guī)定,Cookie格式如下:
Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;
Domain=DOMAIN_NAME;SECURE
NAME=VALUE:
這是每一個(gè)Cookie均必須有的部分。NAME是該Cookie的名稱,VALUE是該
Cookie的值。在字符串“NAME=VALUE”中,不含分號(hào)、逗號(hào)和空格等
字符。
Expires=DATE:Expires變量是一個(gè)只寫變量,它確定了Cookie有效終止日
期。該屬性值DATE必須以特定的格式來(lái)書寫:星期幾,
DD-MM-YY HH:MM:SS GMT,GMT表示這是格林尼治時(shí)間。反之,不以這樣的格
式來(lái)書寫,系統(tǒng)將無(wú)法識(shí)別。該變量可省,如果缺省時(shí),
則Cookie的屬性值不會(huì)保存在用戶的硬盤中,而僅僅保存在內(nèi)存當(dāng)中,Cookie
文件將隨著瀏覽器的關(guān)閉而自動(dòng)消失。
Domain=DOMAIN-NAME:Domain該變量是一個(gè)只寫變量,它確定了哪些
Internet域中的Web服務(wù)器可讀取瀏覽器所存取的Cookie,即只有來(lái)自這
個(gè)域的頁(yè)面才可以使用Cookie中的信息。這項(xiàng)設(shè)置是可選的,如果缺省時(shí),設(shè)
置Cookie的屬性值為該Web服務(wù)器的域名。
Path=PATH:Path屬性定義了Web服務(wù)器上哪些路徑下的頁(yè)面可獲取服務(wù)器
設(shè)置的Cookie。一般如果用戶輸入的URL中的路徑部分從第一個(gè)字符
開始包含Path屬性所定義的字符串,瀏覽器就認(rèn)為通過(guò)檢查。如果Path屬性的
值為“/”,則Web服務(wù)器上所有的WWW資源均可讀取該Cookie。同樣
該項(xiàng)設(shè)置是可選的,如果缺省時(shí),則Path的屬性值為Web服務(wù)器傳給瀏覽器的資
源的路徑名。
可以看出我們借助對(duì)Domain和Path兩個(gè)變量的設(shè)置,即可有效地控制
Cookie文件被訪問(wèn)的范圍。
Secure:在Cookie中標(biāo)記該變量,表明只有當(dāng)瀏覽器和Web Server之間的
通信協(xié)議為加密認(rèn)證協(xié)議時(shí),瀏覽器才向服務(wù)器提交相應(yīng)的
Cookie。當(dāng)前這種協(xié)議只有一種,即為HTTPS。
以上的cookie內(nèi)容中,真正發(fā)送給服務(wù)器的內(nèi)容,只有NAME和VALUE對(duì),其他東西
都是給客戶端的瀏覽器用來(lái)管理cookie的,比如是否存放在硬盤上?存放多久?這
瀏覽器在訪問(wèn)哪個(gè)網(wǎng)站的時(shí)候要發(fā)這個(gè)cookie.
這幾個(gè)類型的轉(zhuǎn)換方法:
cookieContainer.GetCookies()獲得cookieCollection,而cookieCollection直
接加索引號(hào)獲得某一個(gè)具體的cookie,
cookieContainer.add()可以添加cookie或者cookieCollection,甚至直接用
http的頭中的cookie信息就可以直接往cookieContainer中添加cookie,用
cookieContainer.SetCookies(Uri, string)來(lái)實(shí)現(xiàn),其中的string就是cookie的字符串內(nèi)容,這個(gè)字符串可以通過(guò)response.Headers.Get("Set-Cookie")獲得,這里注意一點(diǎn),SetCookies()函數(shù)中的Uri,不能和cookie字符串中的域名Domain完全相同,比如Uri=new Uri("http://.google.com"),而cookie中的
Domain=.google.com,這個(gè)時(shí)候cookieContainer.SetCookies()函數(shù)將會(huì)報(bào)錯(cuò),
提示域名不正確,解決方法是,uri = new Uri("http://www.google.com")即可,
反正改為其他的類似路徑都可以,為什么不能相同,誰(shuí)知道呢,問(wèn)微軟去.就這個(gè)
地方的問(wèn)題,害我耗了幾個(gè)小時(shí).
CookieContainer.GetCookieHeader()函數(shù)可以讀出cookieContainer中所有指
定網(wǎng)站的cookie,以字符串方式顯示.
自己想要輸入字符串單獨(dú)構(gòu)造cookie,也很簡(jiǎn)單,Cookie的構(gòu)造函數(shù)就搞定.
cookie操作實(shí)例
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">有效天數(shù)</param>
/// <returns></returns>
public bool setCookie(string strName, string strValue, int strDay)
{
try
{
HttpCookie Cookie = new HttpCookie(strName);
//Cookie.Domain = ".xxx.com";//當(dāng)要跨域名訪問(wèn)的時(shí)候,給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";//當(dāng)要跨域名訪問(wèn)的時(shí)候,給cookie指定域名即可,格式為.xxx.com
Cookie.Expires = DateTime.Now.AddDays(-1);
System.Web.HttpContext.Current.Response.Cookies.Add(Cookie);
return true;
}
catch
{
return false;
}
}
}
上一篇:詳解C#借助.NET框架中的XmlTextReader類讀取XML的方法
欄 目:C#教程
下一篇:C#正則匹配RegexOptions選項(xiàng)的組合使用方法
本文標(biāo)題:總結(jié)C#網(wǎng)絡(luò)編程中對(duì)于Cookie的設(shè)定要點(diǎn)
本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/6600.html
您可能感興趣的文章
- 01-10C#通過(guò)反射獲取當(dāng)前工程中所有窗體并打開的方法
- 01-10C#實(shí)現(xiàn)Winform中打開網(wǎng)頁(yè)頁(yè)面的方法
- 01-10C#實(shí)現(xiàn)由四周向中心縮小的窗體退出特效
- 01-10Extjs4如何處理后臺(tái)json數(shù)據(jù)中日期和時(shí)間
- 01-10C#中DataGridView常用操作實(shí)例小結(jié)
- 01-10C#編程獲取資源文件中圖片的方法
- 01-10asp.net中XML如何做增刪改查操作
- 01-10C#利用反射技術(shù)實(shí)現(xiàn)去掉按鈕選中時(shí)的邊框效果
- 01-10c# ArrayList的使用方法小總結(jié)
- 01-10C#中查找Dictionary中的重復(fù)值的方法


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10C#通過(guò)反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁(yè)無(wú)法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過(guò)重寫Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 04-02jquery與jsp,用jquery
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10delphi制作wav文件的方法


