Asp.Net的Cookie用法以及注意事项

在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 }

 

posted on 2013-04-01 15:30  xxxteam  阅读(2838)  评论(0编辑  收藏  举报

导航