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
分享到:
相关推荐
.NET框架为Web开发提供了强大的支持,其中包括处理Cookie的能力。Cookie是一种小型文本文件,由服务器发送到用户的浏览器,并在用户再次访问同一网站时返回。在C#.net和vb.net中,处理Cookie主要涉及到创建、读取、...
我们定义了两个枚举类型和一个 DLL 导入函数,并实现了一个名为 FullWebBrowserCookie 的类,该类可以获取 Web 浏览器的完整 Cookie。 通过本文,我们学会了如何使用 .net 获取浏览器 Cookie,包括 HttpOnly 类型的...
Cookie是一种在客户端存储数据的技术,ASP.NET购物车使用Cookie时,通常会为每个商品创建一个唯一的标识,并在用户浏览商品时将这些标识存储在Cookie中。当用户添加商品到购物车时,服务器会返回一个新的或更新的...
这里创建了一个名为"userInfo"的Cookie,并设置了两个子项("userName"和"lastVisit"),每个子项都有自己的值。 ##### 2. 使用HttpCookie对象 ```csharp HttpCookie aCookie = new HttpCookie("userInfo"); a...
Cookie的优点是简单易用,可以跨域,但缺点是数据量有限(通常每个Cookie不超过4KB),且安全性较低,容易被第三方拦截。 Session,另一方面,是在服务器端存储数据的方式。当服务器创建一个Session时,会为每个...
然而,实际项目中,为了代码的可维护性和复用性,我们通常会封装一个Cookie操作帮助类。以`HttpCookieHelper.cs`为例,这个类可能包含以下功能: 1. **创建Cookie**:提供一个方法如`AddCookie(HttpResponse ...
文章提供了两个代码段。第一个代码段定义了一个`INativeMethods`内部封送类。这个类使用了`DllImport`属性,它用于导入Windows平台下的WinINet动态链接库中的`InternetGetCookieExW`方法。这个方法比标准的`...
在.NET开发中,Session和Cookie是两种常用的用户状态管理机制,尤其在实现网站的自动登录功能时,它们扮演着至关重要的角色。本文将详细介绍这两种技术及其在实现自动登录中的应用。 首先,Session是服务器端存储...
6. **安全考虑**:虽然MD5哈希提供了一定的保护,但需要注意的是,MD5已知存在碰撞攻击的风险,即两个不同的输入可能会得到相同的哈希值。因此,在实际应用中,可以考虑使用更安全的哈希算法,如SHA-256。 7. **...
在这个"asp.net-c#写的一个cookie和session登陆小实验"中,我们主要关注的是两种在Web开发中常用的用户状态管理技术:Cookie和Session。 Cookie是服务器在客户端(用户浏览器)上存储的小型文本文件。它包含了特定...
最后,需要在*** Core的登录成功逻辑中将这个Cookie添加到HTTP响应中,让客户端浏览器能够同时存储两套Cookie。 在整个方案的实施过程中,需要关注几个技术细节。首先是Cookie的配置,包括过期时间、域设置以及...
在ASP.NET中,我们可以使用`HttpCookie`类来处理cookie,而在客户端,JavaScript提供了`document.cookie`属性来访问和修改cookie。 1. **添加cookie(ASP.NET)**: 在ASP.NET中,我们可以通过创建`HttpCookie`对象...
要想测试这个跨域,我们需要修改本地的host文件,配置两个域名,例如 127.0.0.1 www.xj5u.com 127.0.0.1 cc.xj5u.com 第一个项目绑定第一个域名, 第二个项目绑定第二个域名 然后开始测试第二个项目的登录就...
ASP.NET Cookie 编程知识点 ASP.NETCookie 是一段文本信息,在客户端存储,用于将...Cookie 是 ASP.NET 中一个非常重要的概念,用于存储客户端数据和会话信息。正确地使用 Cookie 可以提高应用程序的性能和安全性。
Session和Cookie的主要区别在于存储位置和生命周期。Session数据存储在服务器端,而Cookie数据则存储在客户端(用户的浏览器)。Session适用于存储大量或敏感信息,因为它们不会暴露给用户,但会消耗服务器资源。...
ASP.NET的Session和Cookie是Web开发中的两种关键的用户状态管理技术。它们允许开发者存储和检索用户特定的信息,从而提供个性化的用户体验。了解并熟练掌握这两者,对于任何ASP.NET Web应用程序的开发者来说都至关...
这个Cookie在浏览器关闭后消失,Session超时判断依赖于客户端持续发送的SessionID。 - Session超时逻辑:客户端首次访问后,收到SessionID;只要浏览器不关闭,每次访问都会发送SessionID,服务器据此识别会话状态...
浏览器在接收到这个新的响应后,会检测到"admin"这个Cookie已经过期,从而删除它。 ### 注意事项 1. **生效时间**:设置过期时间后,清空Cookie的效果并不会立即在服务器端体现,而是需要等到客户端再次发送请求时...
这个Cookie包含了用户的身份信息,下次请求时,服务器会检查这个Cookie来验证用户的身份。 要实现记住用户名和密码的功能,我们需要在登录过程中添加额外的逻辑。以下是实现步骤: 1. **修改登录表单**:在登录...
4. **DateTimeDiff.cs** - 时间日期差计算类,此类可能包含用于计算两个日期之间差值的方法,如天数、小时数或分钟数。在报表、日程管理或数据分析等场景中,这样的功能非常常见。 5. **UBB.cs** - UBB(Unified ...