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属性即可。