ASP.NET实现Cookie功能的三个基本操作(写入,读取,删除)

简介:

依照我的习惯,依照前几天在园子里看到的那篇文章“二逼程序员 VS 苦逼程序员”,准确点来说,我就是个苦逼的程序员。

1. 二逼程序员(Day Programmers)

2. 苦逼程序员(Night Programmers)

因为我是个Night Programmer。总是在晚上完成各种编码工作。(这篇文章也是晚上三点开始写的,今天中午写完。)

二逼程序员 VS 苦逼程序员

 

说正事


 

简而言之,在Cookie的时候有三个过程,分别是“写入,读取,删除”。任何伟大之作都是有基本的东西构成的,而Cookie的运用也不例外。

 

写入:


 

 

复制代码
 1   //创建一个HttpCookie对象
2 HttpCookie cookie = new HttpCookie("RON");
3 //设定此cookies值
4 cookie.Value = "我叫小魏";
5 //设定cookie的生命周期,在这里定义为三分钟
6 DateTime dtNow = DateTime.Now;
7 TimeSpan tsMinute = new TimeSpan(0, 0, 3, 0);
8 cookie.Expires = dtNow + tsMinute;
9 cookie["Name"] = "小魏";
10 cookie["Sex"] = "";
11 cookie["Age"] = "22";
12 //加入此cookie
13 Response.Cookies.Add(cookie);
14 Response.Write("Cookie创建完毕");
复制代码

HttpCookie 在 System.Web 这个命名空间里面,所以你需要引用

1 using System.Web;

 

*创建Cookie

创建Cookie的时候必须指定Cookie的Name和Value。在例子中,cookie 的Name是“RON”,Value是“我叫小魏”!cookie是保存在浏览器当中的,而每个Cookie的区别是根据Name这个属性的值来确定的。所以,如果Name相同,Cookie的内容将被覆盖。而那些cookie["Name"]等等是cookie["RON"]的子键。

 

*Cookie有效期

Cookie的另外一个重要的属性是有效期。通过属性Expires设置。例子中,cookie设置的有效期为三分钟。目前为止,最长的有效期是50年,这是那个丫地设定的啊。有50年的公司都不错了。其实在有效期的设置上我更喜欢这句话。

cookie.Expires = DateTime.Now.AddMinutes(3);

简单,容易理解。

在有效期的问题上,有两个时间比较特殊:

#永久性 Cookie 设置永远不过期 最长为50年

#非永久性 Cookie 不设置有效期 关闭浏览器即消失

 

*多值cookie

Cookie可以保存多个值,你只要创建一个带子键的Cookie就可以了。例如

1 HttpCookie aCookie = new HttpCookie("userInfo");
2 aCookie.Values["userName"] = "rond";
3 aCookie.Values["lastVisit"] = DateTime.Now.ToString();
4 aCookie.Expires = DateTime.Now.AddDays(1);

例子中创建了一个Name为userInfo的Cookie,而且此Cookie还带有两个子键。

 

*Cookie的范围

默认情况下,Cookie的整个站点都是有效的。意思就是说,在同一个站点(也可以理解成同一个域名)下的所有网页都是可以获取到Cookie的。如果你不希望你的Cookie在所有范围都有效。你可以限定Cookie的范围。方法是通过Cookie的Path属性,属性值为范围所在的路径,相对路径有效。譬如

1 appCookie.Path = "/Application1";

 除了限定Cookie的路径范围,还可以用Cookie的Domain属性限定Cookie的域名范围。例如

1 appCookie.Domain = "jsjx.gdufs.edu.cn";

例子中将cookie限定在“广东外语外贸大学”的“信息学院”(jsjx.gdufs.edu.cn)网站下,而不会再“广东外语外贸大学”(gdufs.edu.cn)的主网站上面产生效果。

*提交Cookie

Cookie是保存在浏览器的东西,所以需要提交才能将信息保存在浏览器当中。

1 Response.Cookies.Add(aCookie);

这样就可以将数据保存在浏览器当中了。

 

PS:Cookie的创建还有另外一种方式,可以参考MSDN的说明。

 

读取:


 

先来个例子

复制代码
          //获得cookie
    HttpCookie cookie = Request.Cookies["RON"];
//确定是否存在用户输入的cookie
if (null == cookie)
{
Response.Write("没有发现指定的cookie!");
}
else
{
//找到指定的cookie,显示cookie的值
String strCookieValue = cookie.Value.ToString();
Response.Write( " cookie 的值为: " + strCookieValue + " <br >");
Response.Write(cookie["UserName"]);
}
复制代码


*获取

通过Request响应,我们可以获取到Request.Cookies["RON"].根据原本的设定可以将Cookie的值读取出来。cookie.Value可以获取到Cookie保存的所有值。不过个人比较喜欢cookie["UserName"]的方式获取自己想要的cookie的值。

如果你是通过多值设置了Cookie的子键。那么获取方式和设定方式是差不多的。


*读取多个Cookie

在一个浏览器上面,可能保存了不止一个cookie。但是怎么获取所有的cookie呢。写个循环就出来了。

复制代码
        for (int i = 0; i < Request.Cookies.Count; i++)
{
Response.Write("Cookie[" + i + "]的Name为:" + Request.Cookies[i].Name + "<br/>");
Response.Write("Cookie[" + i + "]的Value为:" + Request.Cookies[i].Value + "<br/>");
}
复制代码

如果你不想把子键的键/值都显现在一起,而想单个获取。也可以写个循环全部显示出来。

复制代码
        //显示子键
for (int i = 0; i < Request.Cookies.Count; i++)
{
Response.Write("Cookie[" + i + "]的Name为:" + Request.Cookies[i].Name + "<br/>");
if (Request.Cookies[i].HasKeys)
{
for (int j = 0; j < Request.Cookies[i].Values.Count; j++)
{
Response.Write("Cookie[" + i + "][" + j + "]的Name为:" + Request.Cookies[i].Values.AllKeys[j] + "<br/>");
Response.Write("Cookie[" + i + "][" + j + "]的Value为:" + Request.Cookies[i].Values[j] + "<br/>");
}
}
}
复制代码

 

删除:


 

Cookie保存在浏览器端,保存时间是开发者设定的时间,当时间过期时,浏览器端就会删除Cookie。所以删除Cookie的工作就是将Cookie的有效期设置过期即可。你可以设置有效期为当前时间,Cookie立即过期。也可以设置过去的时间,Cookie也会被删除。

如例子,我当初创建了一个叫做RON的Cookie,现在我要删除它。所以要新建一个同名的Cookie,时间设置为过去。

*删除某一个Cookie

 HttpCookie aCookie= new HttpCookie("RON");
aCookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(aCookie);

这样就可以将Cookie["RON"]删除。

可能你不记得你在测试的时候浏览器端到底保存了多少个Cookie,你可以写个循环将Cookie全部删除掉。

*删除所有Cookie

复制代码
        //删除全部Cookie
for (int i = 0; i < Request.Cookies.Count; i++)
{
string cookiesName = Request.Cookies[i].Name;
HttpCookie cookie = new HttpCookie(cookiesName);
cookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(cookie);

}
复制代码


*修改

其实修改和删除一样的,都是新建一个同名Cookie,只不过删除设置的时间是过去的或者当前,修改就可以设置时间为新的一个有效期,内容也可以重新定义,这样就会覆盖浏览器端的内容。就不打代码了。

测试用例

Test.aspx

View Code

Test.aspx.cs

View Code



只要知道Cookie的“写入,读取,删除”,你可以运用Cookie做许多你意想不到的事情。譬如前几天看到一篇博客,将新浪微博临时保存为发送的信息用Cookie实现出来了。我做了不少网站,这是第一次真的将Cookie的功能做进一个产品里面。根据用户体验来说,我觉得这个功能还是挺有用的。写这篇博客的的原因主要是当做读书笔记。这次为了实现这个功能查看了不少MSDN的内容。记下这些是希望,自己下次使用这些功能的的时候容易查找。

 


 

参考资料:

MSDN:http://msdn.microsoft.com/zh-cn/library/ms178194(v=VS.80).aspx

本文转自 Ron Ngai 博客园博客,原文链接:http://www.cnblogs.com/rond/archive/2012/03/10/cookie.html  ,如需转载请自行联系原作者

相关文章
|
26天前
|
存储 文字识别 C#
.NET开源免费、功能强大的 Windows 截图录屏神器
今天大姚给大家分享一款.NET开源免费(基于GPL3.0开源协议)、功能强大、简洁灵活的 Windows 截图、录屏、Gif动图制作神器:ShareX。
|
3月前
|
存储 开发框架 NoSQL
ASP.NET WEB——项目中Cookie与Session的用法
ASP.NET WEB——项目中Cookie与Session的用法
39 0
|
3天前
|
定位技术 API C#
.NET开源、功能强大、跨平台的图表库
.NET开源、功能强大、跨平台的图表库
|
5天前
|
人工智能 开发框架 .NET
【专栏】解密.NET 技术的强大功能
【4月更文挑战第29天】这篇文章探讨了.NET技术的关键特性,如多语言支持、统一运行时、丰富的类库和跨平台能力,以及其在企业应用、Web开发、移动应用和游戏开发中的应用。文章指出,.NET正通过性能优化、容器化支持、AI整合和开源策略适应未来软件开发需求,强调了开发者应掌握.NET技术并参与社区,共同推动技术发展。
|
2月前
|
Windows
windows server 2019 安装NET Framework 3.5失败,提示:“安装一个或多个角色、角色服务或功能失败” 解决方案
windows server 2019 安装NET Framework 3.5失败,提示:“安装一个或多个角色、角色服务或功能失败” 解决方案
174 0
|
2月前
|
存储 搜索推荐 安全
Python中的Cookie模块有什么功能
Python中的Cookie模块有什么功能
27 0
|
3月前
|
C# Windows
.NET开源的一个小而快并且功能强大的 Windows 动态桌面软件
.NET开源的一个小而快并且功能强大的 Windows 动态桌面软件
|
8月前
|
Apache
基于commons-net实现ftp创建文件夹、上传、下载功能.
基于commons-net实现ftp创建文件夹、上传、下载功能.
106 0
|
10月前
|
移动开发 监控 网络协议
基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)
基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)
|
5月前
|
数据采集 消息中间件 安全
.NET使用分布式网络爬虫框架DotnetSpider快速开发爬虫功能
.NET使用分布式网络爬虫框架DotnetSpider快速开发爬虫功能