`
piperzero
  • 浏览: 3477876 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

.net的两个Cookie类的区别

阅读更多
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 类 System.Net.Cookie 类
MSDN中对构造函数的描述:
已重载。 初始化 HttpCookie 类的新实例。
MSDN中对构造函数的描述:
已重载。 根据 Netscape 规范初始化 Cookie 类的新实例。通常,应用程序无需构造 Cookie 类,因为该类会基于通过 HTTP 响应接收的 Set-Cookie 标头自动创建。

Comment

获取或设置服务器可添加到 Cookie 中的注释。

CommentUri

获取或设置服务器可通过 Cookie 来提供的 URI 注释。

Discard

获取或设置由服务器设置的丢弃标志。

Domain
获取或设置将此 Cookie 与其关联的域。

Domain
获取或设置 Cookie 对其有效的 URI。

Expired

获取或设置 Cookie 的当前状态。

Expires
获取或设置此 Cookie 的过期日期和时间。

Expires
获取或设置作为 DateTime 的 Cookie 过期日期和时间。

HttpOnly
确定页脚本或其他活动内容是否可访问此 Cookie。

Name
获取或设置 Cookie 的名称。

Name
获取或设置 Cookie 的名称。

Path
获取或设置要与当前 Cookie 一起传输的虚拟路径。

Path
获取或设置此 Cookie 适用于的 URI。

Port
获取或设置此 Cookie 适用于的 TCP 端口的列表。

Secure
获取或设置一个值,该值指示是否使用安全套接字层 (SSL)(即仅通过 HTTPS)传输 Cookie。

Secure
获取或设置 Cookie 的安全级别。

TimeStamp
获取此 Cookie 作为 DateTime 发出的时间。

Value
获取或设置单个 Cookie 值。

Value
获取或设置 Cookie 的 Value。

Values
获取单个 Cookie 对象所包含的键值对的集合。

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

分享到:
评论

相关推荐

    asp.net cookie跨域

    要想测试这个跨域,我们需要修改本地的host文件,配置两个域名,例如 127.0.0.1 www.xj5u.com 127.0.0.1 cc.xj5u.com 第一个项目绑定第一个域名, 第二个项目绑定第二个域名 然后开始测试第二个项目的登录就...

    asp.net中常用到的类和方法(v 1.2)

    Compare------------------数据比较类(如比较时间大小) Cookie-------------------操作Cookie的类 DataBase-----------------数据操作的类 Encrypt------------------加密的类(有MD5和SHA1两种加密...

    asp.net mvc 国际化 Cookie asp.net mvc 一键国际化

    在其中建两个键字对{fa:爸爸},{fa:妈妈},在英文资源文件里修改“值”为英文{fa:Father},{mo:Mother}。然后复制两次,并修改名称Language.zh-CN.resx和Language.en-US.resx。为什么会有三个文件呢?系统...

    asp.net知识库

    通过作业,定时同步两个数据库 SQLSERVER高级注入技巧 利用反射实现ASP.NET控件和数据实体之间的双向绑定,并且在客户端自动验证输入的内容是否合法 asp.net报表解决方法 SQLDMO类的使用 SQL过程自动C#封装,支持从表到...

    ASP.NET常见问题集锦.zip

    ASP.NET 中 Cookie 的基本知识.doc ASP.NET 页面对象模型.doc asp.net200问-专家门诊—ASP.NET开发答疑 ASP.NetWebPage深入探讨.txt ASP.NET中为DataGrid添加合计字段.doc ASP.NET中实现DataGrid数据排序.doc ...

    十天学会ASP.net--我认为ASP.NET比ASP难很多,希望大家做好准备

    在ASP.NET里面,数据库还是这两个但是常用的语言多了一个C#,也是微软推荐的语言,为.NET平台定制的语言。这样ASP.NET就有四种组合:VB+ACCESS,VB+SQL,C#+ACCESS,C#+SQL,本教程会使用C#+ACCESS,兼顾四种来写,...

    .net2.0论坛 源码

    因为今后打算全面开始接触学习ASP.NET MVC源代码和jquery,打算今后用这两个框架打造蜘蛛侠论坛3.0版。所以,今天发布蜘蛛侠论坛基于ASP.NET 2.0 WebForm技术开发的最终版本。 我为这个论坛倾注了很多的个人时间,...

    亮剑.NET深入体验与实战精要2

    1.2 .NET的几个特性 7 1.3 万丈高楼平地起:面试者必会 9 1.3.1 C#介绍 10 1.3.2 命名空间 10 1.3.3 C#语法格式要点 10 1.3.4 变量 12 1.3.5 类型推断 12 1.3.6 变量的作用域 13 1.3.7 常量 16 1.3.8 流程控制 16 ...

    ASP.NET的网页代码模型及生命周期

    在ASP.NET的代码隐藏页模型中,一个完整的.aspx页面包含两个页面,分别是以.aspx和.cs文件为后缀的文件,这两个文件在形成了整个Web窗体。在编译的过程中都被编译成由项目生成的动态链接库(.DLL),同时,.aspx页面...

    Session Cookie的HttpOnly和secure属性

    一、属性说明: 1 secure属性 ...也就是说两个属性,并不能解决cookie在本机出现的信息泄漏的问题(FireFox的插件FireBug能直接看到cookie的相关信息)。 二、实例 项目架构环境:jsp+servlet+applet

    在Asp.net网页上写读Cookie的两种不同语法介绍

    在做asp.net开发时,为了存储一些信息,软件开发网常常是Session与Cookie同时使用。Session资料在软件开发网上会找到很多相关的,而Cookie相关的资料相对很少,所以想补充一下。下面是写Cookie的语法: 代码如下: ...

    亮剑.NET深入体验与实战精要3

    1.2 .NET的几个特性 7 1.3 万丈高楼平地起:面试者必会 9 1.3.1 C#介绍 10 1.3.2 命名空间 10 1.3.3 C#语法格式要点 10 1.3.4 变量 12 1.3.5 类型推断 12 1.3.6 变量的作用域 13 1.3.7 常量 16 1.3.8 流程控制 16 ...

    在两个ASP.NET应用程序之间共享身份验证Cookie

    在应用程序之间共享身份验证信息。

    ASP.NET 控件的使用

    9.3.3 使用ASP.NET的Cookie-Parameter对象 277 9.3.4 使用ASP.NET的Form-Parameter对象 279 9.3.5 使用ASP.NET的Profile-Parameter对象 281 9.3.6 使用QueryStringParameter对象 282 9.3.7 使用SessionParameter对象...

    ASP.NET国际化 一键全站切换 全站切换 国际化例子

    系统必须有一个默认文件“GlobalLanguage.resx”,两种语言两个文件.) 六:修改英文和中文资源文件里的键值对。 说明(网上大多做法都是把语言设置为浏览器自动识别语言, 这种方式在实际项目中一般不用,所以直接...

    ASP.NET4高级程序设计(第4版) 3/3

    此外,《ASP.NET 4高级程序设计(第4版)》专门提供了两章的内容来教你如何用Ajax 技术制作快速响应的页面,以及如何使用微软的ASP.NETAJAX平台。另外,还专门介绍了ASP.NET4 新增的功能,如MVC 和动态数据等。  ...

    .net开源的综合开发框架wojilu框架.zip

    “我记录”这套源码总共包括 两个部分:一个 .net 平台下的全栈式、轻量级开发框架,包括 ORM、MVC、IOC、AOP、JSON、LOG 等,同时包括全套图文教程;用这个框架开发的 SNS 互联网产品。本产品以 SNS 为基础平台,...

    c# .net在WEB页中的COOKIES设置技巧

    一、设置cookies的方法很简单,有以下两种方法: 1、直接添加Cookie值: Response.Cookies[“userName”] = “Tom”; Response.Cookies[“userName”].Expires = DateTime.Now.AddDays(1) ; \\过期时间,在Cookies...

    asp.net身份验证票源码

    asp.net身份验证票源码 demo示例 共有两个

Global site tag (gtag.js) - Google Analytics