博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Asp.Net的Cookie用法以及注意事项
阅读量:5098 次
发布时间:2019-06-13

本文共 2923 字,大约阅读时间需要 9 分钟。

在Asp.net中使用Cookie,首先要注意4个问题。

1.Cookie最大存储量:<= 4k。这个值是由客户端浏览器决定的。

 

2.缓存问题。Cookie在客户端有一个缓存时间,比如缓存1天。那么Cookie在本地设置后,在1天之内,打开这个网页,客户端浏览器会自动加载这个Cookie。另外,每次调试程序,也需要手动清空浏览器Cookie缓存,以防止历史Cookie干扰调试。Windows下清空Cookie脚本: 。如果超过缓存日期,

 

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 else6 {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 else6 {7     Cookie不存在8 }

     4.5.2 一个维度中,是否存在某个KeyName的判断:

1 if (Request.Cookies["CookieSet_Single_1"]["Key1"] == null)2 {3     Key1分支不存在4 }5 else6 {7     Key1分支存在,值为 Request.Cookies["CookieSet_Single_1"]["Key1"];8 }

 

转载于:https://www.cnblogs.com/xxxteam/archive/2013/04/01/2993589.html

你可能感兴趣的文章
django迁移数据库错误
查看>>
yii 跳转页面
查看>>
洛谷 1449——后缀表达式(线性数据结构)
查看>>
[最小割][Kruskal] Luogu P5039 最小生成树
查看>>
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
Dirichlet分布深入理解
查看>>
(转)Android之发送短信的两种方式
查看>>
python第九天课程:遇到了金角大王
查看>>
字符串处理
查看>>
ECharts(Enterprise Charts 商业产品图表库)初识
查看>>
LeetCode Factorial Trailing Zeroes (阶乘后缀零)
查看>>
hdu 5402 Travelling Salesman Problem (技巧,未写完)
查看>>
[AIR] 获取U盘,打开U盘
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>
获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName...
查看>>
证件照(1寸2寸)拍摄处理知识汇总
查看>>
罗马数字与阿拉伯数字转换
查看>>
Eclipse 反编译之 JadClipse
查看>>
asp.net 获取IP地理位置的几个主要接口
查看>>