HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)

网站的Cookie管理除了限定Domain增强安全性之外,.net 2.0新增一个Cookie属性HttpOnly。很棒!

在做一个cookie功能时用到了Cookie的一个属性HttpOnly

HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)Code
<!-- {cps..10}-->HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)HttpCookiea = new HttpCookie( " TestName " , " TestValue " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) a.Domain
= " .test.com " ;
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) a.HttpOnly
= true ;
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Response.Cookies.Add(a);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)

原以为这样后,客户端应该无法访问该Cookie了! 

结果,如图

HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) 感觉比较诡异,于是再查MSDN

得知原来有两个cookie类。System.Web.HttpCookie 类 和 System.Net.Cookie 类

注意命名空间不同。

两个类的说明分别如下:

Cookie 类提供一组用于管理 Cookie 的属性和方法。无法继承此类。命名空间: System.Net

HttpCookie 类 提供创建和操作各 HTTP Cookie 的类型安全方法。 命名空间: System.Web

两个类都有HttpOnly属性,分别说明如下:

Cookie.HttpOnly 属性注意:此属性在 .NET Framework 2.0 版中是新增的。确定页脚本或其他活动内容是否可访问此 Cookie。

HttpCookie.HttpOnly 属性注意:此属性在 .NET Framework 2.0 版中是新增的。 获取或设置一个值,该值指定 Cookie 是否可通过客户端脚本访问。

问题来了,关键的理解点在于通过什么东东来访问。

不太理解微软机器翻译的“页脚本或其他活动内容 ”究竟指什么玩意?

于是做测试,建立一个Web Application,

在TestCookie.aspx页面,的Page_Load事件中加入

HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)Code
<!-- {cps..16}-->HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)// Response.Cookies.Clear();
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
// System.Web.HttpCookie;
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookiea = new HttpCookie( " TestName " , " TestValue " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
// a.Domain=Request.ServerVariables["HTTP_HOST"];
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
a.HttpOnly = false ;
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Response.Cookies.Add(a);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) HttpCookieb
= new HttpCookie( " TestB " , " TestB " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) b.HttpOnly
= true ;
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
// b.Domain=Request.ServerVariables["HTTP_HOST"];
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
Response.Cookies.Add(b);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Response.Write(
" System.Web.HttpCookie;------------<br/> " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
for ( int i = 0 ;i < Request.Cookies.Count;i ++ )
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) {
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) HttpCookiecook
= Request.Cookies[i];
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Response.Write(
" <Br/> " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Response.Write(
" Cookie: " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Response.Write(
string .Format( " {0}={1} " ,cook.Name,cook.Value) + " <Br/> " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
// Response.Write(string.Format("Domain:{0}",cook.Domain)+"<Br/>");
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
Response.Write( string .Format( " Path:{0} " ,cook.Path) + " <Br/> " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Response.Write(
string .Format( " Secure:{0} " ,cook.Secure) + " <Br/> " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Response.Write(
string .Format( " HttpOnly:{0} " ,cook.HttpOnly) + " <Br/> " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) }

HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
//
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
// System.Net.CookieContainerCookieContainerObject=newSystem.Net.CookieContainer();
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
System.Net.CookieCollectionCookieCollectionObject = new System.Net.CookieCollection();
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) System.Net.Cookiea2
= new System.Net.Cookie( " TestName2 " , " TestValue2 " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) a2.HttpOnly
= false ;
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) a2.Domain
= Request.ServerVariables[ " HTTP_HOST " ];
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
// CookieContainerObject.Add(a2);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
CookieCollectionObject.Add(a2);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) System.Net.Cookieb2
= new System.Net.Cookie( " TestB2 " , " TestB2 " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) b2.HttpOnly
= true ;
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) b2.Domain
= Request.ServerVariables[ " HTTP_HOST " ];
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
// CookieContainerObject.Add(b2);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
CookieCollectionObject.Add(b2);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Response.Write(
" <Br/> " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Response.Write(
" System.Net.Cookie;*********************<br/> " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
foreach (System.Net.Cookieck in CookieCollectionObject)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) {
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Response.Write(
" <Br/> " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Response.Write(
" Cookie: " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Response.Write(
string .Format( " {0}={1} " ,ck.Name,ck.Value) + " <Br/> " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
// Response.Write(string.Format("Domain:{0}",ck.Domain)+"<Br/>");
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
Response.Write( string .Format( " Path:{0} " ,ck.Path) + " <Br/> " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Response.Write(
string .Format( " Secure:{0} " ,ck.Secure) + " <Br/> " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Response.Write(
string .Format( " HttpOnly:{0} " ,ck.HttpOnly) + " <Br/> " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) }

该段代码的功能主要是测试能否正确读写Cookie

结果如下:

HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)Code
<!-- {cps..12}-->HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)System.Web.HttpCookie;------------
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Cookie:TestName=TestValue
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Domain:10.103.33.102:2888
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Path:/
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Secure:False
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) HttpOnly:False
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Cookie:TestB=TestB
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Domain:10.103.33.102:2888
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Path:/
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Secure:False
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) HttpOnly:True
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) System.Net.Cookie;*********************
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Cookie:TestName2=TestValue2
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Domain:10.103.33.102:2888
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Path:
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Secure:False
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) HttpOnly:False
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Cookie:TestB2=TestB2
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Domain:10.103.33.102:2888
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Path:
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Secure:False
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) HttpOnly:True

再建一ConSole Application,

看看能否获取并修改该页面的Cookie

代码如下:

HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)Code
<!-- {cps..13}-->HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)string surl = " http://10.103.33.102:2888/TestCookie.aspx " ;
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) HttpWebRequestWebRequestObject
= (HttpWebRequest)WebRequest.Create(surl);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) WebRequestObject.CookieContainer
= new CookieContainer();
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) HttpWebResponseWebResponseObject
= (HttpWebResponse)WebRequestObject.GetResponse();
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) System.Net.CookieCollectionCookieCollectionObject
= new System.Net.CookieCollection();
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
// Printthepropertiesofeachcookie.
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
foreach (Cookiecook in WebResponseObject.Cookies)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) {
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" -----------------------System.Web.HttpCookie-------------------------- " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" Cookie: " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" {0}={1} " ,cook.Name,cook.Value);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" Domain:{0} " ,cook.Domain);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" Path:{0} " ,cook.Path);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" Port:{0} " ,cook.Port);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" Secure:{0} " ,cook.Secure);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" HttpOnly:{0} " ,cook.HttpOnly);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
/**/ ////// Showthestringrepresentationofthecookie.
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
/// /Console.WriteLine("String:{0}",cook.ToString());

HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)System.Net.Cookiec = new System.Net.Cookie();
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) c.Name
= cook.Name;
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) c.Path
= cook.Path;
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) c.HttpOnly
= cook.HttpOnly;
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) c.Domain
= cook.Domain;
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) c.Expires
= cook.Expires;
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) c.Value
= cook.Value;
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) CookieCollectionObject.Add(cook);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) }

HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
foreach (System.Net.Cookieck in CookieCollectionObject)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) {
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" ----------------------System.Net.Cookie------------------------------------- " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" Cookie: " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" {0}={1} " ,ck.Name,ck.Value);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" Domain:{0} " ,ck.Domain);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" Path:{0} " ,ck.Path);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" Port:{0} " ,ck.Port);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" Secure:{0} " ,ck.Secure);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" HttpOnly:{0} " ,ck.HttpOnly);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) System.Web.HttpCookiec
= new System.Web.HttpCookie(ck.Name);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) c.Name
= ck.Name;
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) c.Path
= ck.Path;
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) c.HttpOnly
= ck.HttpOnly;
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) c.Domain
= ck.Domain;
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) c.Expires
= DateTime.Now.AddDays( 1 );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) c.Value
= ck.Value + " --Update " ;
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) WebResponseObject.Cookies.Add(ck);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) }

HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
foreach (Cookiecook in WebResponseObject.Cookies)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) {
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" -----------------UpdateedSystem.Web.HttpCookie-------------------------- " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" Cookie: " );
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" {0}={1} " ,cook.Name,cook.Value);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" Domain:{0} " ,cook.Domain);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" Path:{0} " ,cook.Path);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" Port:{0} " ,cook.Port);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" Secure:{0} " ,cook.Secure);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Console.WriteLine(
" HttpOnly:{0} " ,cook.HttpOnly);
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) }

运行结果

HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)Code
<!-- {cps..14}-->HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)-----------------------System.Web.HttpCookie--------------------------
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Cookie:
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) TestName=TestValue
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Domain:10.103.33.102
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Path:/
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Port:
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Secure:False
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) HttpOnly:False
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) -----------------------System.Web.HttpCookie--------------------------
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Cookie:
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) TestB=TestB
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Domain:10.103.33.102
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Path:/
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Port:
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Secure:False
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) HttpOnly:True
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) ----------------------System.Net.Cookie-------------------------------------
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Cookie:
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) TestName=TestValue
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Domain:10.103.33.102
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Path:/
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Port:
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Secure:False
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) HttpOnly:False
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) ----------------------System.Net.Cookie-------------------------------------
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Cookie:
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) TestB=TestB
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Domain:10.103.33.102
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Path:/
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Port:
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Secure:False
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) HttpOnly:True
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) -----------------UpdateedSystem.Web.HttpCookie--------------------------
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Cookie:
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) TestName=TestValue
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Domain:10.103.33.102
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Path:/
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Port:
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Secure:False
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) HttpOnly:False
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) -----------------UpdateedSystem.Web.HttpCookie--------------------------
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Cookie:
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) TestB=TestB
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Domain:10.103.33.102
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Path:/
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Port:
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) Secure:False
HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创) HttpOnly:True

请注意, c.Value = ck.Value+"--Update";这句在修改Cookie.value后并没有成功写入该页面的Cookie集合中,换言之,一个未知的客户端应用程序并没有通过读取一个页面的Cookie并修改再写入该页面的Cookie集合。

我的理解是:

1、System.Web.httpCookie主要是服务器端应用。 System.Net.Cookie主要是客户端程序应用,后者可以读取前者的Cookie属性和值,而不能修改服务器定义的Cookie。

2、System.Web.httpCookie.HttpOnly=true后,客户端脚本无法访问该Cookie,但其他程序仍然可以访问。

System.Net.Cookie.HttpOnly=true后,困其是客户端程序,故有更多的限制,不允许”页面脚本及其他程序“访问 该Cookie, 只有创建它的应用程序可以访问。并且在特定的Domain下。

值得注意的是:HttpOnly属性仅对IE 6 SP1以上的版本才有效,在FireFox3.01下也可以!但对于IE5.x的机器,可能就****

欢迎大伙指正。