ASP.NET实现Cookie功能的三个基本操作(写入,读取,删除)
说正事
简而言之,在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 cookie= new HttpCookie("RON");
aCookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(cookie);
这样就可以将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

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
Cookie名称:<asp:TextBox ID="NameField" runat="server" />
<br>
Cookie的值:<asp:TextBox ID="ValueField" runat="server" />
<br>
<asp:Button ID="Button1" Text="创建Cookie" OnClick="WriteClicked" runat="server" />
<br>
<asp:button ID="Button2" text = "读取cookie" onclick = "ReadClicked" runat = "server" />
<br />
<asp:Button ID="Button3" runat="server" onclick="Button3_Click" Text="测试" />
<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</form>
</body>
</html>

Test.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; public partial class Test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ }
protected void WriteClicked(object sender, EventArgs e)
{
//创建一个HttpCookie对象
HttpCookie cookie = new HttpCookie("jsjx");
//设定此cookies值
cookie.Value = "GDUFS的值";
//设定cookie的生命周期,在这里定义为一个小时
DateTime dtNow = DateTime.Now;
TimeSpan tsMinute = new TimeSpan(0, 0, 3, 0);
cookie.Expires = dtNow + tsMinute;
cookie["姓名"] = "王天";
cookie["性别"] = "男";
cookie["年龄"] = "26";
//加入此cookie
Response.Cookies.Add(cookie);
Response.Write(NameField.Text + "Cookie创建完毕 <br > <hr > ");
}
protected void ReadClicked(Object Sender, EventArgs e)
{
//得到用户输入的cookie名称
String strCookieName = "11";
//获得cookie
HttpCookie cookie = Request.Cookies[strCookieName];
//确定是否存在用户输入的cookie
if (null == cookie)
{
Response.Write("没有发现指定的cookie <br > <hr > ");
}
else
{
//找到指定的cookie,显示cookie的值
String strCookieValue = cookie.Value.ToString();
Response.Write(strCookieName + " cookie 的值为: <b > "
+ strCookieValue + " </b > <br > <hr > ");
Response.Write(cookie["姓名"]);
}
}
protected void Button3_Click(object sender, EventArgs e)
{
System.Text.StringBuilder output = new System.Text.StringBuilder();
HttpCookie aCookie; //循环输出Cookie的内容(1)
//for (int i = 0; i < Request.Cookies.Count; i++)
//{
// aCookie = Request.Cookies[i];
// output.Append("Cookie name = " + Server.HtmlEncode(aCookie.Name)
// + "<br />");
// output.Append("Cookie value = " + Server.HtmlEncode(aCookie.Value)
// + "<br /><br />");
//}
//Label1.Text = output.ToString(); //循环输出Cookie的内容(2)
//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/>");
//} //显示子键(1)
//for (int i = 0; i < Request.Cookies.Count; i++)
//{
// aCookie = Request.Cookies[i];
// output.Append("Name = " + aCookie.Name + "<br />");
// if (aCookie.HasKeys)
// {
// for (int j = 0; j < aCookie.Values.Count; j++)
// {
// string subkeyName = Server.HtmlEncode(aCookie.Values.AllKeys[j]);
// string subkeyValue = Server.HtmlEncode(aCookie.Values[j]);
// output.Append("Subkey name = " + subkeyName + "<br />");
// output.Append("Subkey value = " + subkeyValue +
// "<br /><br />");
// }
// }
// else
// {
// output.Append("Value = " + Server.HtmlEncode(aCookie.Value) +
// "<br /><br />");
// }
//}
//Label1.Text = output.ToString(); ////显示子键(2)
//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/>");
// }
// }
//} //for (int i = 0; i < Request.Cookies.Count; i++)
//{
// aCookie = Request.Cookies[i];
// output.Append("Name = " + aCookie.Name + "<br />");
// if (aCookie.HasKeys)
// {
// for (int j = 0; j < aCookie.Values.Count; j++)
// {
// subkeyName = Server.HtmlEncode(aCookie.Values.AllKeys[j]);
// subkeyValue = Server.HtmlEncode(aCookie.Values[j]);
// output.Append("Subkey name = " + subkeyName + "<br />");
// output.Append("Subkey value = " + subkeyValue +
// "<br /><br />");
// }
// }
// else
// {
// output.Append("Value = " + Server.HtmlEncode(aCookie.Value) +
// "<br /><br />");
// }
//}
//Label1.Text = output.ToString(); //删除全部Cookie
string cookieName;
int limit = Request.Cookies.Count;
for (int i = 0; i < limit; i++)
{
cookieName = Request.Cookies[i].Name;
aCookie = new HttpCookie(cookieName);
aCookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(aCookie);
} //删除全部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的“写入,读取,删除”,你可以运用Cookie做许多你意想不到的事情。譬如前几天看到一篇博客,将新浪微博临时保存为发送的信息用Cookie实现出来了。我做了不少网站,这是第一次真的将Cookie的功能做进一个产品里面。根据用户体验来说,我觉得这个功能还是挺有用的。写这篇博客的的原因主要是当做读书笔记。这次为了实现这个功能查看了不少MSDN的内容。记下这些是希望,自己下次使用这些功能的的时候容易查找。http://www.cnblogs.com/rond/archive/2012/03/10/cookie.html
ASP.NET实现Cookie功能的三个基本操作(写入,读取,删除)的更多相关文章
- Asp.net操作cookie大全
实例代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3 ...
- .NET跨平台之旅:ASP.NET Core从传统ASP.NET的Cookie中读取用户登录信息
在解决了asp.net core中访问memcached缓存的问题后,我们开始大踏步地向.net core进军——将更多站点向asp.net core迁移,在迁移涉及获取用户登录信息的站点时,我们遇到 ...
- ASP.NET的Cookie和Session
HTTP属于应用层,HTTP协议一共有五大特点:1.支持客户/服务器模式;2.简单快速;3.灵活;4.无连接;5.无状态. 无状态HTTP协议是无状态的协议.一旦数据交换完毕,客户端与服务器端的连接就 ...
- Asp.net mvc 知多少(三)
本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...
- 【基础】Asp.Net操作Cookie总结
一.什么是Cookie? Cookie是存储在客户端文件系统的文本文件或客户端浏览器对话的内存中的少量数据.它主要用来跟踪数据设置,例如:当我们要访问一个网站网页的时候,用户请求网页时,应用程序可能会 ...
- ASP.NET中Cookie跨域的问题及解决代码
ASP.NET中Cookie跨域的问题及解决代码 http://www.liyumei.net.cn/post/share18.html Cookies揭秘 http://www.cnblogs.c ...
- ASP.NET中登录功能的简单逻辑设计
ASP.NET中登录功能的简单逻辑设计 概述 逻辑设计 ...
- asp.net各种cookie代码和解析
Cookie是一段文本信息,在客户端存储 Cookie 是 ASP.NET 的会话状态将请求与会话关联的方法之一.Cookie 也可以直接用于在请求之间保持数据,但数据随后将存储在客户端并随每个请求一 ...
- ASP.NET 操作Cookie详解 增加,修改,删除
ASP.NET 操作Cookie详解 增加,修改,删除 Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密).定义于RFC2109.它 ...
随机推荐
- 三个安装,手机看VIP电影。写给亲爱的学习
三个安装,看VIP电影. 市场安装firefox 安装Tempermonkey 打开firefox,点击右上角的三个点,点击附加组件 继续点击浏览全部firefox附加组件 在上面的搜索框输入 tam ...
- nested exception is java.sql.SQLException: Incorrect string value: '\xE7\x99\xBB\xE9\x99\x86...' for column 'image' at row 1
HTTP Status 500 - Hibernate operation: could not insert: [cn.itcast.shop.product.vo.Product]; uncate ...
- MySQL5.7 主从复制配置
一.主从复制原理 MySQL 主从复制是一个异步的复制过程,主库发送更新事件到从库,从库读取更新记录,并执行更新记录,使得从库的内容与主库保持一致.每一个主从复制的连接,都有三个线程.拥有多个从库的主 ...
- XP停服务,卡巴当后盾——卡巴斯基反病毒软件2014(一年版)
领取地址:http://xp.kaba365.com/3180000.asp 活动说明活动时间:2014年4月9日零时起赠送产品:卡巴斯基反病毒软件2014(一年版)激活码.赠送对象:中国大陆所有XP ...
- 转:ios导航栏设置
原帖:http://www.cocoachina.com/industry/20131104/7287.html 本文提供的代码需要用Xcode 5来执行.如果你还在使用老版本的Xcode,那么在运行 ...
- BZOJ4710: [Jsoi2011]分特产【组合数学+容斥】
Description JYY 带队参加了若干场ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们. JYY 想知道,把这些特产分给N 个同学,一共有多少种不同的分法?当然,JYY 不希望 ...
- PAT天梯:L1-019. 谁先倒
L1-019. 谁先倒 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳 ...
- hasura graphql server event trigger 试用
hasura graphql server 是一个很不错的graphql 引擎,当前版本已经支持event triiger 了 使用此功能我们可以方便的集成webhook功能,实现灵活,稳定,快捷的消 ...
- QT内使用OpenCV
在QT内使用Opencv,调试了好久总是出问题. 開始在pro文件内进行了opencv的配置,然后就是不能识别#include包括文件,后来不知道什么原因.奇妙地 能够识别包括了. 但是,新的问题出现 ...
- FaceBook: Text Tag Recommendation
Text Tag Recommendation --------2013/12/20 一: 背景 Kaggle上 facebook招聘比赛III. 任务要求是给定文本中抽取关键词.这里称作tag吧. ...