• 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

  • 相关阅读:
    Docker 中国官方镜像加速
    mysql主从同步
    hadoop相关
    Mac上Ultra Edit的激活
    ansible安装应用软件
    Docker学习第二天-容器
    wwnjld团队第二轮迭代成员分数
    第二轮迭代发布报告
    wwnjld第二轮迭代测试报告
    12.24会议记录
  • 原文地址:https://www.cnblogs.com/mili3/p/3488713.html
Copyright © 2020-2023  润新知