`
piperzero
  • 浏览: 3555008 次
  • 性别: 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

分享到:
评论

相关推荐

    C#.net与vb.net中读写Cookie的方法

    .NET框架为Web开发提供了强大的支持,其中包括处理Cookie的能力。Cookie是一种小型文本文件,由服务器发送到用户的浏览器,并在用户再次访问同一网站时返回。在C#.net和vb.net中,处理Cookie主要涉及到创建、读取、...

    .net 获取浏览器Cookie(包括HttpOnly)实例分享.docx

    我们定义了两个枚举类型和一个 DLL 导入函数,并实现了一个名为 FullWebBrowserCookie 的类,该类可以获取 Web 浏览器的完整 Cookie。 通过本文,我们学会了如何使用 .net 获取浏览器 Cookie,包括 HttpOnly 类型的...

    asp.net购物车(cookie、session两种实现方式)

    Cookie是一种在客户端存储数据的技术,ASP.NET购物车使用Cookie时,通常会为每个商品创建一个唯一的标识,并在用户浏览商品时将这些标识存储在Cookie中。当用户添加商品到购物车时,服务器会返回一个新的或更新的...

    ASP.NET中cookie读写方法介绍

    这里创建了一个名为"userInfo"的Cookie,并设置了两个子项("userName"和"lastVisit"),每个子项都有自己的值。 ##### 2. 使用HttpCookie对象 ```csharp HttpCookie aCookie = new HttpCookie("userInfo"); a...

    .net两种传值方式

    Cookie的优点是简单易用,可以跨域,但缺点是数据量有限(通常每个Cookie不超过4KB),且安全性较低,容易被第三方拦截。 Session,另一方面,是在服务器端存储数据的方式。当服务器创建一个Session时,会为每个...

    Cookie操作帮助类

    然而,实际项目中,为了代码的可维护性和复用性,我们通常会封装一个Cookie操作帮助类。以`HttpCookieHelper.cs`为例,这个类可能包含以下功能: 1. **创建Cookie**:提供一个方法如`AddCookie(HttpResponse ...

    .net 获取浏览器Cookie(包括HttpOnly)实例分享

    文章提供了两个代码段。第一个代码段定义了一个`INativeMethods`内部封送类。这个类使用了`DllImport`属性,它用于导入Windows平台下的WinINet动态链接库中的`InternetGetCookieExW`方法。这个方法比标准的`...

    .net通过Session和Cookie实现网站自动登录的技术

    在.NET开发中,Session和Cookie是两种常用的用户状态管理机制,尤其在实现网站的自动登录功能时,它们扮演着至关重要的角色。本文将详细介绍这两种技术及其在实现自动登录中的应用。 首先,Session是服务器端存储...

    利用cookie实现asp.net(c#)验证码

    6. **安全考虑**:虽然MD5哈希提供了一定的保护,但需要注意的是,MD5已知存在碰撞攻击的风险,即两个不同的输入可能会得到相同的哈希值。因此,在实际应用中,可以考虑使用更安全的哈希算法,如SHA-256。 7. **...

    asp.net-c#写的一个cookie和session登陆小实验

    在这个"asp.net-c#写的一个cookie和session登陆小实验"中,我们主要关注的是两种在Web开发中常用的用户状态管理技术:Cookie和Session。 Cookie是服务器在客户端(用户浏览器)上存储的小型文本文件。它包含了特定...

    详解ASP.NET与ASP.NET Core用户验证Cookie并存解决方案

    最后,需要在*** Core的登录成功逻辑中将这个Cookie添加到HTTP响应中,让客户端浏览器能够同时存储两套Cookie。 在整个方案的实施过程中,需要关注几个技术细节。首先是Cookie的配置,包括过期时间、域设置以及...

    asp.net与javascript混合添加、删除、修改、读取cookie

    在ASP.NET中,我们可以使用`HttpCookie`类来处理cookie,而在客户端,JavaScript提供了`document.cookie`属性来访问和修改cookie。 1. **添加cookie(ASP.NET)**: 在ASP.NET中,我们可以通过创建`HttpCookie`对象...

    asp.net cookie跨域

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

    【ASP.NET编程知识】asp.net各种cookie代码和解析实例.docx

    ASP.NET Cookie 编程知识点 ASP.NETCookie 是一段文本信息,在客户端存储,用于将...Cookie 是 ASP.NET 中一个非常重要的概念,用于存储客户端数据和会话信息。正确地使用 Cookie 可以提高应用程序的性能和安全性。

    session cookie asp.net

    Session和Cookie的主要区别在于存储位置和生命周期。Session数据存储在服务器端,而Cookie数据则存储在客户端(用户的浏览器)。Session适用于存储大量或敏感信息,因为它们不会暴露给用户,但会消耗服务器资源。...

    asp.net的session和cookie的应用

    ASP.NET的Session和Cookie是Web开发中的两种关键的用户状态管理技术。它们允许开发者存储和检索用户特定的信息,从而提供个性化的用户体验。了解并熟练掌握这两者,对于任何ASP.NET Web应用程序的开发者来说都至关...

    ASP.NET中Cookie编程简明参考

    这个Cookie在浏览器关闭后消失,Session超时判断依赖于客户端持续发送的SessionID。 - Session超时逻辑:客户端首次访问后,收到SessionID;只要浏览器不关闭,每次访问都会发送SessionID,服务器据此识别会话状态...

    asp.net清空Cookie的两种方法

    浏览器在接收到这个新的响应后,会检测到"admin"这个Cookie已经过期,从而删除它。 ### 注意事项 1. **生效时间**:设置过期时间后,清空Cookie的效果并不会立即在服务器端体现,而是需要等到客户端再次发送请求时...

    ASP.NET中登录时记住用户名和密码

    这个Cookie包含了用户的身份信息,下次请求时,服务器会检查这个Cookie来验证用户的身份。 要实现记住用户名和密码的功能,我们需要在登录过程中添加额外的逻辑。以下是实现步骤: 1. **修改登录表单**:在登录...

    asp.net开发常用类

    4. **DateTimeDiff.cs** - 时间日期差计算类,此类可能包含用于计算两个日期之间差值的方法,如天数、小时数或分钟数。在报表、日程管理或数据分析等场景中,这样的功能非常常见。 5. **UBB.cs** - UBB(Unified ...

Global site tag (gtag.js) - Google Analytics