C#使用Cookie方法
1 代码 2 3 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> //写入 4 protected void Button1_Click(object sender, EventArgs e) 5 { 6 HttpCookie cookie=new HttpCookie("MyCook");//初使化并设置Cookie的名称 7 DateTime dt=DateTime.Now; 8 TimeSpan ts = new TimeSpan(0, 0, 1,0,0);//过期时间为1分钟 9 cookie.Expires = dt.Add(ts);//设置过期时间 10 cookie.Values.Add("userid", "userid_value"); 11 cookie.Values.Add("userid2","userid2_value2"); 12 Response.AppendCookie(cookie); 13 //输出该Cookie的所有内容 14 //Response.Write(cookie.Value);//输出为:userid=userid_value&userid2=userid2_value2 15 } 16 17 //读取 18 protected void Button2_Click(object sender, EventArgs e) 19 { 20 21 // HttpCookie cokie = new HttpCookie("MyCook");//初使化 22 if (Request.Cookies["MyCook"]!=null) 23 { 24 //Response.Write("Cookie中键值为userid的值:" + Request.Cookies["MyCook"]["userid"]);//整行 25 //Response.Write("Cookie中键值为userid2的值" + Request.Cookies["MyCook"]["userid2"]); 26 Response.Write(Request.Cookies["MyCook"].Value);//输出全部的值 27 } 28 } 29 30 //修改Cookie 31 protected void Button3_Click(object sender, EventArgs e) 32 { 33 //获取客户端的Cookie对象 34 HttpCookie cok = Request.Cookies["MyCook"]; 35 36 if (cok != null) 37 { 38 //修改Cookie的两种方法 39 cok.Values["userid"] = "alter-value"; 40 cok.Values.Set("userid", "alter-value"); 41 42 //往Cookie里加入新的内容 43 cok.Values.Set("newid", "newValue"); 44 Response.AppendCookie(cok); 45 } 46 } 47 48 //删除Cookie 49 protected void Button4_Click(object sender, EventArgs e) 50 { 51 52 HttpCookie cok = Request.Cookies["MyCook"]; 53 if (cok != null) 54 { 55 if (!CheckBox1.Checked) 56 { 57 cok.Values.Remove("userid");//移除键值为userid的值 58 } 59 else 60 { 61 TimeSpan ts = new TimeSpan(-1, 0, 0, 0); 62 cok.Expires = DateTime.Now.Add(ts);//删除整个Cookie,只要把过期时间设置为现在 63 } 64 Response.AppendCookie(cok); 65 } 66 }
具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的
1 转:http://www.cnblogs.com/henryhappier/archive/2011/03/03/1969564.html 2 今天在测试Ticket时,发现原来保存的Cookie莫名其妙的就被清除了,自己没有做过任何的改动。经开发人员Allon推断,应该是Cookie数量达到了浏览器的限制。 3 4 网上查找出来的结果是: 5 6 7 8 9 10 一、浏览器允许每个域名所包含的cookie数: 11 12 Microsoft指出InternetExplorer8增加cookie限制为每个域名50个,但IE7似乎也允许每个域名50个cookie。 13 14 Firefox每个域名cookie限制为50个。 15 16 Opera每个域名cookie限制为30个。 17 18 Safari/WebKit貌似没有cookie限制。但是如果cookie很多,则会使header大小超过服务器的处理的限制,会导致错误发生。 19 20 注:“每个域名cookie限制为20个”将不再正确! 21 22 二、当很多的cookie被设置,浏览器如何去响应。 23 24 除Safari(可以设置全部cookie,不管数量多少),有两个方法: 25 26 最少最近使用(leastrecentlyused(LRU))的方法:当Cookie已达到限额,自动踢除最老的Cookie,以使给最新的Cookie一些空间。Internet Explorer和Opera使用此方法。 27 28 Firefox很独特:虽然最后的设置的Cookie始终保留,但似乎随机决定哪些cookie被保留。似乎没有任何计划(建议:在Firefox中不要超过Cookie限制)。 29 30 三、不同浏览器间cookie总大小也不同: 31 32 Firefox和Safari允许cookie多达4097个字节,包括名(name)、值(value)和等号。 33 34 Opera允许cookie多达4096个字节,包括:名(name)、值(value)和等号。 35 36 Internet Explorer允许cookie多达4095个字节,包括:名(name)、值(value)和等号。 37 38 注:多字节字符计算为两个字节。在所有浏览器中,任何cookie大小超过限制都被忽略,且永远不会被设置。
cookie的发送与传输方式:通过响应报文与请求报文进行发送与响应

Cookie分类:
根椐Cookie的生存周期进行cookie分类:缓存cookie(也称:会话cookie)、硬盘cookie
缓存cookie(也称:会话cookie):若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。
硬盘cookie:若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。如:
{
HttpCookie cookie=new HttpCookie("MyCook");//初使化并设置Cookie的名称
DateTime dt=DateTime.Now;
TimeSpan ts = new TimeSpan(0, 0, 1,0,0);//过期时间为1分钟
cookie.Expires = dt.Add(ts);//设置过期时间
}
浙公网安备 33010602011771号