您的位置:首页 > 编程语言 > ASP

ASP.NET Cookie(一)--基本应用

2020-03-02 02:41 441 查看

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

1.读取Cookie

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

1.1.读取指定Cookie

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

1 //第一种方法
2 if(Request.Cookies["userName"] != null)
3     Label1.Text = Server.HtmlEncode(Request.Cookies["userName"].Value);
4
5 //第二种方法
6 if(Request.Cookies["userName"] != null){
7     HttpCookie aCookie = Request.Cookies["userName"];
8     Label1.Text = Server.HtmlEncode(aCookie.Value);
9 }
View Code

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

1.2.读取Cookie集合

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

1 System.Text.StringBuilder output = new System.Text.StringBuilder();
2 HttpCookie aCookie;
3 for(int i=0; i<Request.Cookies.Count; i++)
4 {
5     aCookie = Request.Cookies[i];
6     output.Append("Cookie name = " + Server.HtmlEncode(aCookie.Name)
7         + "<br />");
8     output.Append("Cookie value = " + Server.HtmlEncode(aCookie.Value)
9         + "<br /><br />");
10 }
11 Label1.Text = output.ToString();
View Code

    注意:在运行此代码时,可能会看到一个名为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的方法:

1 //第一种方法
2 Response.Cookies["userName"].Value = "patrick";
3 Response.Cookies["userName"].Expires = DateTime.Now.AddDays(1);
4
5 //第二种方法
6 HttpCookie aCookie = new HttpCookie("lastVisit");
7 aCookie.Value = DateTime.Now.ToString();
8 aCookie.Expires = DateTime.Now.AddDays(1);
9 Response.Cookies.Add(aCookie);
View Code

    此示例向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的值:

1 int counter;
2 if (Request.Cookies["counter"] == null)
3     counter = 0;
4 else
5 {
6     counter = int.Parse(Request.Cookies["counter"].Value);
7 }
8 counter++;
9
10 Response.Cookies["counter"].Value = counter.ToString();
11 Response.Cookies["counter"].Expires = DateTime.Now.AddDays(1);
View Code

4.删除Cookie

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

1 HttpCookie aCookie;
2 string cookieName;
3 int limit = Request.Cookies.Count;
4 for (int i=0; i<limit; i++)
5 {
6     cookieName = Request.Cookies[i].Name;
7     aCookie = new HttpCookie(cookieName);
8     aCookie.Expires = DateTime.Now.AddDays(-1);
9     Response.Cookies.Add(aCookie);
10 }
View Code

 

转载于:https://www.cnblogs.com/ayic/p/3308474.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
aijian0876 发布了0 篇原创文章 · 获赞 0 · 访问量 98 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: