Cookie提供了一种在Web应用程序中存储用户特定信息的方法。例如,当用户访问您的站点时,您可以使用Cookie存储用户首选项或其他信息。当该用户再次访问您的网站时,应用程序便可以检索以前存储的信息。

1.读取Cookie

浏览器向服务器发出请求时,会随请求一起发送该服务器的Cookie。在ASP.NET应用程序中,可以使用HttpRequest对象读取Cookie,该对象可用作Page类的Request属性使用。

1.1.读取指定Cookie

下面的代码示例演示两种方法,通过这两种方法可获取名为username的Cookie的值,并将其值显示在Label控件中:

 //第一种方法
if(Request.Cookies["userName"] != null)
Label1.Text = Server.HtmlEncode(Request.Cookies["userName"].Value); //第二种方法
if(Request.Cookies["userName"] != null){
HttpCookie aCookie = Request.Cookies["userName"];
Label1.Text = Server.HtmlEncode(aCookie.Value);
}

在尝试获取Cookie的值之前,应确保该Cookie存在;如果该Cookie不存在,将会收到 NullReferenceException异常。还请注意在页面中显示Cookie的内容前,先调用HtmlEncode方法对Cookie的内容进行编码。这样可以防止恶意用户向Cookie中添加可执行脚本造成的影响。

1.2.读取Cookie集合

有时,您可能需要读取可供页面使用的所有Cookie。若要读取可供页面使用的所有 Cookie的名称和值,可以使用如下代码依次通过Cookies集合。

 System.Text.StringBuilder output = new System.Text.StringBuilder();
HttpCookie aCookie;
for(int i=; 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();

    注意:在运行此代码时,可能会看到一个名为ASP.NET_SessionId的Cookie。ASP.NET 使用该Cookie来存储您的会话的唯一标识符。会话Cookie不会保存在您的硬盘上。

2.添加Cookie

浏览器负责管理用户系统上的Cookie。Cookie通过HttpResponse对象发送到浏览器,该对象公开称为Cookies的集合。可以将HttpResponse对象作为Page类的Response属性来访问。要发送给浏览器的所有Cookie都必须添加到此集合中。创建Cookie时,需要指定Name 和Value。每个Cookie必须有一个唯一的名称,以便以后从浏览器读取Cookie时可以识别它。由于Cookie按名称存储,因此用相同的名称命名两个Cookie会导致其中一个Cookie被覆盖。

还可以设置Cookie的到期日期和时间。用户访问编写Cookie的站点时,浏览器将删除过期的Cookie。对于永不过期的Cookie,可将到期日期设置为从现在起50年(或更长时间)。

    注意:用户可随时清除其计算机上的 Cookie。即便存储的 Cookie 距到期日期还有很长时间,但用户还是可以决定删除所有 Cookie,清除 Cookie 中存储的所有设置。

如果没有设置Cookie的有效期,仍会创建Cookie,但不会将其存储在用户的硬盘上。而会将Cookie作为用户会话信息的一部分进行维护。当用户关闭浏览器时,Cookie便会被丢弃。这种非永久性Cookie很适合用来保存只需短时间存储的信息,或者保存由于安全原因不应该写入客户端计算机上的磁盘的信息。例如,如果用户在使用一台公用计算机,而您不希望将Cookie写入该计算机的磁盘中,这时就可以使用非永久性Cookie。

下面的示例演示两种编写Cookie的方法:

 //第一种方法
Response.Cookies["userName"].Value = "patrick";
Response.Cookies["userName"].Expires = DateTime.Now.AddDays(); //第二种方法
HttpCookie aCookie = new HttpCookie("lastVisit");
aCookie.Value = DateTime.Now.ToString();
aCookie.Expires = DateTime.Now.AddDays();
Response.Cookies.Add(aCookie);

此示例向Cookies集合添加两个Cookie,一个名为userName,另一个名为lastVisit。对于第一个Cookie,Cookies集合的值是直接设置的。可以通过这种方式向集合添加值,因为 Cookies是从NameObjectCollectionBase类型的专用集合派生的。

对于第二个Cookie,代码创建了一个HttpCookie类型的对象实例,设置其属性,然后通过Add方法将其添加到Cookies集合。在实例化HttpCookie对象时,必须将该Cookie的名称作为构造函数的一部分进行传递。

这两个示例都完成了同一任务,即向浏览器写入一个Cookie。在这两种方法中,有效期值必须为DateTime类型。但是,lastVisited值也是日期时间值。因为所有Cookie值都存储为字符串,因此,必须将日期时间值转换为String

3.修改Cookie

不能直接修改Cookie。更改Cookie的过程涉及创建一个具有新值的新Cookie,然后将其发送到浏览器来覆盖客户端上的旧版本Cookie。下面的代码示例演示如何更改存储用户对站点的访问次数的Cookie的值:

 int counter;
if (Request.Cookies["counter"] == null)
counter = ;
else
{
counter = int.Parse(Request.Cookies["counter"].Value);
}
counter++; Response.Cookies["counter"].Value = counter.ToString();
Response.Cookies["counter"].Expires = DateTime.Now.AddDays();

4.删除Cookie

删除Cookie(即从用户的硬盘中物理移除Cookie)是修改Cookie的一种形式。由于 Cookie在用户的计算机中,因此无法将其直接移除。但是,可以让浏览器来为您删除Cookie。该技术是创建一个与要删除的Cookie同名的新Cookie,并将该 Cookie的到期日期设置为早于当前日期的某个日期。当浏览器检查Cookie的到期日期时,浏览器便会丢弃这个现已过期的Cookie。下面的代码示例演示删除应用程序中所有可用Cookie的一种方法:

 HttpCookie aCookie;
string cookieName;
int limit = Request.Cookies.Count;
for (int i=; i<limit; i++)
{
cookieName = Request.Cookies[i].Name;
aCookie = new HttpCookie(cookieName);
aCookie.Expires = DateTime.Now.AddDays(-);
Response.Cookies.Add(aCookie);
}

ASP.NET Cookie(一)--基本应用的更多相关文章

  1. 【转】asp.net Cookie值中文乱码问题解决方法

    来源:脚本之家.百度空间.网易博客 http://www.jb51.net/article/34055.htm http://hi.baidu.com/honfei http://tianminqia ...

  2. ASP.NET Cookie 概述【转】

    来源:http://msdn.microsoft.com/zh-cn/library/ms178194(VS.80).aspx ASP.NET Cookie 概述 Cookie 提供了一种在 Web ...

  3. How to secure the ASP.NET_SessionId cookie? 设置ASP.NET_SessionId Secure=true

    How to secure the ASP.NET_SessionId cookie? To add the ; secure suffix to the Set-Cookie http header ...

  4. ASP.NET Cookie是怎么生成的

    ASP.NET Cookie是怎么生成的 可能有人知道Cookie的生成由machineKey有关,machineKey用于决定Cookie生成的算法和密钥,并如果使用多台服务器做负载均衡时,必须指定 ...

  5. asp.net,cookie,写cookie,取cookie

    Cookie是一段文本信息,在客户端存储 Cookie 是 ASP.NET 的会话状态将请求与会话关联的方法之一.Cookie 也可以直接用于在请求之间保持数据,但数据随后将存储在客户端并随每个请求一 ...

  6. 对ASP.NET Cookie的一些新的认识

    做用户登录,我一直用form验证的方式.有时候,为了节省时间,用户希望用户名输入框能够记住用户名,省得下次重新输入.这个时候光用form验证是不行的,因为form验证的话,用户一退出系统就失效了,所以 ...

  7. asp中cookie欺骗/注入原理与防范

     一直以来sql注入被广泛关注,也有专门的防注系统代码.发现,如果代码不严谨也会有cookie欺骗/注入的情况.原来, 防注入系统没有注意到 Cookies 的问题!这里以ASP为例,分析一下cook ...

  8. ASP.NET Cookie对象到底是毛啊?(简单小例子)

    记得刚接触asp.net的时候,就被几个概念搞的头痛不已,比如Request,Response,Session和Cookie.然后还各种在搜索引擎搜,各种问同事的,但是结果就是自己还是很懵的节奏. 那 ...

  9. Asp.Net Cookie的清除

    背景 最近做到一个asp.net项目,项目中保存用户信息用到了cookie,因此,在注销身份的时候,就需要清除掉cookie. 探索过程 我先是试验了这种代码,在没有特殊声明前,代码都是写在Page_ ...

随机推荐

  1. [转载]从MyEclipse到IntelliJ IDEA-让你摆脱鼠标,全键盘操作

    从MyEclipse转战到IntelliJ IDEA的经历 注转载址:http://blog.csdn.net/luoweifu/article/details/13985835 我一个朋友写了一篇“ ...

  2. WCF学习之旅—WCF服务的WAS寄宿(十二)

    上接    WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一) 八.WAS宿主 IIS ...

  3. LLBL Gen Pro 5.0 企业应用开发入门

    Solutions Design 公司于2016年5月发布了LLBL Gen Pro 5.0,这个新版本的发布出乎于我的意料.我的猜想是从4.2升级到4.5,再升级5.x版本,主版本号的变更会给原有客 ...

  4. 06.移动先行之谁主沉浮----我的代码我来写(Xaml的优势)

    如果移动方向有任何问题请参考===> 异常处理汇总-移动系列(点) 前面几节课,我们都是在前台创建对象,进行一些设置,那么我们为什么不用传统的方法来编程呢? 我们今天来试试你就明了了~~ 打开M ...

  5. Xshell生成密钥key(用于Linux 免密码登录)

  6. 【Win 10 应用开发】多媒体转码

    上次本来说好,今天咱们来讨论 socket 相关的话题,但,对于 socket ,老周还有一些问题没弄清楚,等弄清楚了,再和大伙伴们一起探讨.故,今天咱们扯一扯多媒体转码的事. 听起来挺复杂的,不过, ...

  7. Unity3D中使用委托和事件

    前言: 本来早就想写写和代码设计相关的东西了,以前做2DX的时候就有过写写观察者设计模式的想法,但是实践不多.现在转到U3D的怀抱中,倒是接触了不少委托事件的写法,那干脆就在此总结一下吧. 1.C#中 ...

  8. Signalr系列之虚拟目录详解与应用中的CDN加速实战

    目录 对SignalR不了解的人可以直接移步下面的目录 SignalR系列目录 前言 前段时间一直有人问我 在用SignalR 2.0开发客服系统[系列1:实现群发通讯]这篇文章中的"/Si ...

  9. 用JWT来保护我们的ASP.NET Core Web API

    在上一篇博客中,自己动手写了一个Middleware来处理API的授权验证,现在就采用另外一种方式来处理这个授权验证的问题,毕竟现在也 有不少开源的东西可以用,今天用的是JWT. 什么是JWT呢?JW ...

  10. 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(三)

    (三) 搭建Windows Azure Pack环境 1安装SQL SERVER 2012 服务器 为简单起见,本例直接使用了Azure提供的具有SQLServer的Win2012 Server镜像来 ...