扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
我们一般来理解他们的区别就是下面简单的一句:
System.Web命名空间下的是给服务器段用的,System.Net是给客户端程序用的。
实际上不止这点区别:
下面我们来对比这两个Cookie类的属性如下,这些属性都是Copy自MSDN中文版的说明文档:
System.Web.HttpCookie 类 | System.Net.Cookie 类 |
MSDN中对构造函数的描述: 已重载。 初始化 HttpCookie 类的新实例。 |
MSDN中对构造函数的描述: 已重载。 根据 Netscape 规范初始化 Cookie 类的新实例。通常,应用程序无需构造 Cookie 类,因为该类会基于通过 HTTP 响应接收的 Set-Cookie 标头自动创建。 |
Comment 获取或设置服务器可添加到 Cookie 中的注释。 | |
CommentUri 获取或设置服务器可通过 Cookie 来提供的 URI 注释。 | |
Discard 获取或设置由服务器设置的丢弃标志。 | |
Domain |
Domain |
Expired 获取或设置 Cookie 的当前状态。 | |
Expires |
Expires |
HttpOnly | |
Name |
Name |
Path |
Path |
Port | |
Secure |
Secure |
TimeStamp | |
Value |
Value |
Values |
|
Version |
你会看到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的一些编码习惯,于是就有了这个类这样的设计。
在之前的提到过遍历System.Web.HttpCookieCollection,会有如下的写法:
foreach (string name in Request.Cookies) |
而foreach(HttpCookie cookie in Request.Cookies)会出错。为何微软会有这样的设计就可以理解了。
System.Net.Cookie类
这个类最初设计时候应该是考虑主要是客户端使用的,由于考虑到有些服务器的Cookie是遵循rfc2109\rfc2965规范,所以这个类的设计多了那些属性。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者