There can be no Triumph without Loss,No Victory without Suffering,No Freedom without Sacrifice.
All you have to decide is what to do with the time that is given to you.
Get busy Living, or Get busy Dying?
  首页 | 留言给我 | 订阅 Rss | CLI | 黄白之恋 Posts:158   Hits: 5072944    Comments: 173    
 日历归档
<<  <  2024 - 04  >  >>
SuMoTuWeThFrSa
 123456
78910111213
14151617181920
21222324252627
282930
 About Me
 Name: ZhangSichu
 Sex: Male
 Age: 32
 Email: ZhangSichu@gmail.com
 MSN: ZhangSichu@hotmail.com
 Home: ZhangSichu.com
 WeiBo: weibo.com/zhangsichu
 个人推荐
 分类归档
  ·C++/C(5)  RSS
  ·软件工程(1)  RSS
  ·杂事/随感(26)  RSS
  ·.Net/Java(30)  RSS
  ·面向对象程序设计(5)  RSS
  ·汇编/破解(0)  RSS
  ·平面设计(3)  RSS
  ·SQL(5)  RSS
  ·COM/COM+(2)  RSS
  ·Web开发(81)  RSS
 My Friends
Back Forward Refresh Home 2024年4月25日 星期四 RSS CLI Mine Sweeper. In Javascript.

  .Net下两个Cookie类的比较[转载]
字体大小 [ ]

原文地址: http://blog.csdn.net/ghj1976/archive/2007/12/07/1922055.aspx

.Net 提供了两个Cookie类:
System.Web.HttpCookie 类 和 System.Net.Cookie 类。

对应的有两个Cookie 集合类:
System.Web.HttpCookieCollection 类 和 System.Net.CookieCollection 类。

我们一般来理解他们的区别就是下面简单的一句:
System.Web 命名空间下的是给服务器段用的,System.Net 是给客户端程序用的。

实际上不止这点区别:

下面我们来对比这两个Cookie类的属性如下,这些属性都是Copy自MSDN中文版的说明文档:

System.Web.HttpCookie 类 MSDN中对构造函数的描述:
已重载。 初始化 HttpCookie 类的新实例。
Domain
获取或设置将此 Cookie 与其关联的域。
Expires
获取或设置此 Cookie 的过期日期和时间。
Name
获取或设置 Cookie 的名称。
Path
获取或设置要与当前 Cookie 一起传输的虚拟路径。
Secure
获取或设置一个值,该值指示是否使用安全套接字层 (SSL)(即仅通过 HTTPS)传输 Cookie。
Value
获取或设置单个 Cookie 值。
Values
获取单个 Cookie 对象所包含的键值对的集合。

-----------------------------------------------------------------

System.Net.Cookie 类MSDN中对构造函数的描述:
已重载。 根据 Netscape 规范初始化 Cookie 类的新实例。通常,应用程序无需构造 Cookie 类,因为该类会基于通过 HTTP 响应接收的 Set-Cookie 标头自动创建。
Comment
获取或设置服务器可添加到 Cookie 中的注释。
CommentUri
获取或设置服务器可通过 Cookie 来提供的 URI 注释。
Discard
获取或设置由服务器设置的丢弃标志。
Domain
获取或设置 Cookie 对其有效的 URI。
Expired
获取或设置 Cookie 的当前状态。
Expires
获取或设置作为 DateTime 的 Cookie 过期日期和时间。
HttpOnly
确定页脚本或其他活动内容是否可访问此 Cookie。
Name
获取或设置 Cookie 的名称。
Path
获取或设置此 Cookie 适用于的 URI。
Port
获取或设置此 Cookie 适用于的 TCP 端口的列表。
Secure
获取或设置 Cookie 的安全级别。
TimeStamp
获取此 Cookie 作为 DateTime 发出的时间。
Value
获取或设置 Cookie 的 Value。
Version
获取或设置此 Cookie 符合的 HTTP 状态维护版本。

你会看到 System.Net.Cookie 类 比 System.Web.HttpCookie 类多好些属性,一些我们WEB开发人员都不清楚的属性。为什么呢?

这就要从 cookie规范说起。目前有以下几种Cookie规范:
* Netscape cookie草案:是最早的cookie规范,基于rfc2109。尽管这个规范与rc2109有较大的差别,但是很多服务器都与之兼容。
* rfc2109, 是w3c发布的第一个官方cookie规范。理论上讲,所有的服务器在处理cookie(版本1)时,都要遵循此规范。遗憾的是,这个规范太严格了,以致很多服务器不正确的实施了该规范或仍在使用Netscape规范。
* rfc2965规范定义了cookie版本2,并说明了cookie版本1的不足。
rfc2965规范的使用,目前并不多。rfc2109规范相应要严格得多,在实际应用上,并不是所有的浏览器和Web服务器都严格遵守。因此相比较而言,Netscape cookie草案倒是一个比较简洁和被广泛支持的Cookie规范。

回过来我们再看 System.Web.HttpCookie 类 和 System.Net.Cookie 类的区别
我理解的他们的区别应该是:

System.Web.HttpCookie 类
这个类最初设计是考虑是WEB服务器用的,由于微软的WEB服务器并没有遵循 rfc2109 \rfc2965 规范。而是采用的 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 规范,所以这个类的设计多了那些属性。

相关资料:
System.Net.Cookie和System.Web.HttpCookie有什么区别
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.html

HTTP代理如何正确处理Cookie
http://www.ibm.com/developerworks/cn/java/j-cookie/

Netscape cookies 草案
http://wp.netscape.com/eng/mozilla/3.0/handbook/javascript/cookies.htm

W3C的 rfc2109 规范
http://www.w3.org/Protocols/rfc2109/rfc2109.txt

W3C的 rfc2965 规范
http://www.ietf.org/rfc/rfc2965.txt
  Posted @ 12/9/2007 5:13:50 PM | Hits (17140) | Comment (0

  Post Comment
标题 *
作者 *
密码 记住我
评论 *
    


Stable in Firefox 1.5 2.0Stable in IE6 IE7Stable in MozillaStable in Netscape
ZhangSichu.com V0.1.7507
Powered By ZhangSichu
Copyright © ZhangSichu
Download ZhangSichu.com source code. Download source code