在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在Asp.net中使用Cookie,首先要注意4个问题。 1.Cookie最大存储量:<= 4k。这个值是由客户端浏览器决定的。
2.缓存问题。Cookie在客户端有一个缓存时间,比如缓存1天。那么Cookie在本地设置后,在1天之内,打开这个网页,客户端浏览器会自动加载这个Cookie。另外,每次调试程序,也需要手动清空浏览器Cookie缓存,以防止历史Cookie干扰调试。Windows下清空Cookie脚本:http://www.cnblogs.com/xxxteam/archive/2013/04/01/2993594.html 。如果超过缓存日期,
3.一维Cookie在Asp.net中的操作例子,以及创建、访问与更改时的方向问题。 3.1 Cookie,第一次创建,是在服务端向客户端发起Response(回应)之前。因此,Cookie应该在Response中创建并设置值: 1 HttpCookie newCookie = Response.Cookies["CookieSet_Single_1"]; 2 newCookie.Value = "CookieSet_Single_1_Value1"; 3 newCookie.HttpOnly = true; 4 newCookie.Expires = DateTime.Now.AddDays(1); 如果此时服务端还未向客户端进行回应,而需要访问Cookie,应该在Response中访问: 1 string str = Response.Cookies["CookieSet_Single_1"].Value;
3.2 当服务端向客户端回应后,Cookie就被正式设置到客户端里了。接着,客户端访问服务端,这是Request(请求),因此,服务端要访问Cookie,应该是访问客户端发来的Request中的Cookie,因此,此时访问Cookie,应该是在Request中访问: 1 string str = Request.Cookies["CookieSet_Single_1"].Value; 很多人发现ASP.net的Cookie在不同页面中传递时会丢失,就是因为没有弄清这个方向问题,他们第一次在Response中设置Cookie,当客户端再次访问服务端,他们在Response读Cookie,当然读不到。因为此时Cookie在Request里。
3.3 当Cookie已经在客户端中被设置后,此时,服务端如果需要更改Cookie,那么问题就来了。 3.3.1 首先我们要明白一个规则,当服务端要创建,或者更新Cookie时,需要把创建或修改的Cookie,设置在Respon里。这样,这个创建或更新操作,才会发给客户端。由于创建操作在之前已经说了,这里我们只谈更新。 3.3.2 明白了这个规则后,更新一个Cookie要分两步。第一步是把需要更新的Cookie,由Request里,复制到Response里: 1 Response.Cookies.Add( Request.Cookies["CookieSet_Single_1"] ); 接着,再在Response里,对它进行修改: 1 Response.Cookies["CookieSet_Single_1"].Value = "NewValue"; 这时,当浏览器接收到服务端的响应后,则会对Cookie进行更改。 3.4 删除操作。 3.4.1 根据更改操作的规则,要删除一个操作,首先仍然得把它从Request中,复制到Response中: 1 Response.Cookies.Add(Request.Cookies["CookieSet_Single_1"]); 3.4.1 根据更改操作,我们可以把一个值设置为空字符串,以达到“假删除”的目的。但不推荐: 1 Response.Cookies["CookieSet_Single_1"].Value = ""; 3.4.2 科学的删除操作,是把Cookie的失效时间,设置为过期的时间,比如昨天: 1 Response.Cookies["CookieSet_Single_1"].Expires = DateTime.Now.AddDays(-1); 3.5 判断存在性:判断一个值是否存在(如果有删除操作,请保证删除操作不是假删除): 1 if ( Request.Cookies["CookieSet_Single_1"] != null) 2 { 3 Cookie存在 4 } 5 else 6 { 7 Cookie不存在 8 }
4.二维Cookie的操作,基本规则以及操作方向,同于一维操作,因此下面代码不详述方向。 4.1 增加 1 HttpCookie newCookie = Response.Cookies["CookieSet_Single_1"]; 2 newCookie.Values.Add("Key1", "Value1"); 3 newCookie.Values.Add("Key2", "Value2"); 4 newCookie.HttpOnly = true; 5 newCookie.Expires = DateTime.Now.AddDays(1); 4.2 访问 1 string str = Request.Cookies["CookieSet_Single_1"]["Key1"]; 4.3 修改 1 Response.Cookies.Add(Request.Cookies["CookieSet_Single_1"]); 2 Response.Cookies["CookieSet_Single_1"]["Key1"] = "NewValue"; 4.4 整体删除,即删除这个维度。注意,二维Cookie无法在维度内删除某个分支。如果需要删除某个分支,只能使用设置为"null"的假删除。 1 Response.Cookies.Add(Request.Cookies["CookieSet_Single_1"]); 2 Response.Cookies["CookieSet_Single_1"].Expires = DateTime.Now.AddDays(-1); 4.5 判断存在性 4.5.1 整个维度是否存在 1 if (Request.Cookies["CookieSet_Single_1"] != null) 2 { 3 Cookie存在 4 } 5 else 6 { 7 Cookie不存在 8 } 4.5.2 一个维度中,是否存在某个KeyName的判断: 1 if (Request.Cookies["CookieSet_Single_1"]["Key1"] == null) 2 { 3 Key1分支不存在 4 } 5 else 6 { 7 Key1分支存在,值为 Request.Cookies["CookieSet_Single_1"]["Key1"]; 8 }
|
请发表评论