ASP.Net Cookie机制解析

一、Cookie的作用

一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。Cookie就是这样一种机制,用来解决HTTP协议无状态的不足。

 二、什么是Cookie?

Cookie是一小段文本信息,是HTTP协议的一部分。客户端请求服务器的过程中,Cookie在web服务器和浏览器之间进行传递。

Cookie和网站关联,当同一个用户访问不同的站点时,各个站点都可能会向用户的浏览器发送一个 Cookie;浏览器会分别存储所有 Cookie。Cookie也和浏览器相关,不同的浏览器存储不同的Cookie。

Cookie的使用场景:a、记录上次登录的用户名。b、记录登录时间。c、记录用户最近浏览的商品。

Cookie具有不可跨域性,根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。Cookie在客户端是由浏览器来管理的,浏览器判断一个网站是否能操作另一个网站的Cookie的依据是域名,Google和baidu的域名不一样,因此Google网站只能操作自己的Cookie。

注意:虽然网站image.google.com与网站www.google.com同属于Google,但是域名不一样,二者同样也不能相互操作彼此的Cookie。

三、Cookie的限制

各大浏览器对cookie的限制不同:

  IE6.0 IE7.0/8.0 Opera FF Safari Chrome
cookie的个数 每个域为20个 每个域50个 每个域20个 每个域50个 没有个数限制 每个域53个
cookie的大小 4095个字节 4095个字节 4096个字节 4097个字节 4097个字节 4097个字节

如果到了这个限制,浏览器就会删除旧的cookie,而不需要和用户交互。

 四、cookie的读写

Cookie通过HttpResponse对象发送到浏览器,通过HttpRequest对象读取浏览器发送来的Cookie值。要发送给浏览器的所有Cookie都必须添加到Cookie的集合中,创建Cookie是,需要指定Name和Value,因为Cookie是按照名称存储,名称相同时,后者将覆盖前者的Cookie。

写入Cookie:

1 HttpCookie hc=new HttpCookie("");
2 hc.Value="";
3 hc.Expires=DateTime.Now.AddDays(7);//设置Cookie的过期时间
4 context.Response.Cookies.Add(hc);//在Cookie集合中添加一条数据,当客户端对服务器发送请求时,服务器会将Cookie返回给浏览器。
实例

读取Cookie:

1 HttpCookie hc=context.Request.Cookies[""];
2 if(hc!=null)
3 {
4   context.Response.Write(hc.Value);
5 }
实例

删除Cookie,即将Cookie的时间设置为过期:

1 int n=context.Request.Cookies.Count;
2 for(int i=0;i<n;i++)
3 {
4   HttpCookie hc=context.Request.Cookies[i];
5   hc.Expires=DateTime.Now.Add(-1);//设置Cookie的过期时间为负数
6   context.Response.Cookies.Add(hc);
7 }
实例

五、Cookie的过期时间

如果没有设置时间,Cookie存储在内存中,当客户端关闭浏览器时,Cookie自动销毁;如果设置了时间,Cookie存储在用户的硬盘中。删除Cookie时,只要将Cookie的过期时间设置为负数就可以了,设置Expires属性即可。

原文地址:https://www.cnblogs.com/hwy2014/p/4080779.html