zoukankan      html  css  js  c++  java
  • ASP.NET_ASP.NET Cookies

    本文内容

    • 单值 Cookie
    • 多值 Cookie
    • 限制 Cookie
    • 遍历 Cookie
    • 更改 Cookie
    • 确定浏览器是否支持 Cookie

    单值 Cookie

    SingleCookie.aspx 页面
    <%@ Page Language="C#" %>
     
    <!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>
     
        <script runat="server">
       1:  
       2:         protected void BtnCookie_Click(object sender, EventArgs e)
       3:         {
       4:             HttpCookie cookieName = new HttpCookie("Name");
       5:             HttpCookie cookieLastVisit = new HttpCookie("lastVisit");
       6:             
       7:             cookieName.Value = TextBox1.Text;
       8:             cookieName.Expires = DateTime.Now.AddDays(1);
       9:             
      10:             cookieLastVisit.Value = DateTime.Now.ToString();
      11:             cookieLastVisit.Expires = DateTime.Now.AddDays(1);
      12:             
      13:             Response.AppendCookie(cookieName);
      14:             Response.AppendCookie(cookieLastVisit);
      15:             //Response.Cookies.Add(cookieName);
      16:             //Response.Cookies.Add(cookieLastVisit);
      17:             
      18:             Response.Redirect("SingleCookieRec.aspx");
      19:             //Server.Transfer("SingleCookieRec.aspx");
      20:         }
      21:         //protected void BtnCookie_Click(object sender, EventArgs e)
      22:         //{
      23:         //    Response.Cookies["Name"].Value = TextBox1.Text;
      24:         //    Response.Cookies["Name"].Expires = DateTime.Now.AddDays(1);
      25:  
      26:         //    HttpCookie aCookie = new HttpCookie("lastVisit");
      27:         //    aCookie.Value = DateTime.Now.ToString();
      28:         //    aCookie.Expires = DateTime.Now.AddDays(1);
      29:         
      30:         //    Response.Cookies.Add(aCookie);
      31:         
      32:         //    Response.Redirect("SingleCookieRec.aspx");
      33:         //}
      34:     
    </script>
     
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:TextBox ID="TextBox1" runat="server" ForeColor="Red" Width="250px">Name</asp:TextBox>
            <asp:Button ID="BtnCookie" runat="server" OnClick="BtnCookie_Click" Text="BtnCookie" />
        </div>
        </form>
    </body>
    </html>
    SingleCookieRec.aspx 页面
    <%@ Page Language="C#" %>
     
    <!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>
     
        <script runat="server">
       1:  
       2:         protected void Page_Load(object sender, EventArgs e)
       3:         {
       4:             #region 读取Cookie
       5:             string value = string.Empty;
       6:             if (Request.Cookies["Name"] != null)
       7:             {
       8:                 value = Server.HtmlEncode(Request.Cookies["Name"].ToString());
       9:                 Response.Write(value + "<br />");
      10:             }
      11:             if (Request.Cookies["lastVisit"] != null)
      12:             {
      13:                 HttpCookie aCookie = Request.Cookies["lastVisit"];
      14:                 value = Server.HtmlEncode(aCookie.Value);
      15:                 Response.Write(value + "<br />");
      16:             }
      17:  
      18:             #endregion
      19:             #region 删除Cookie
      20:             HttpCookie dCookie;
      21:             string cookieName;
      22:             int limit = Request.Cookies.Count;
      23:             for (int i = 0; i < limit; i++)
      24:             {
      25:                 cookieName = Request.Cookies[i].Name;
      26:                 dCookie = new HttpCookie(cookieName);
      27:                 dCookie.Expires = DateTime.Now.AddDays(-1);
      28:                 Response.Write("Cookies 的内容:" + cookieName + "</br>");
      29:                 Response.Cookies.Add(dCookie);
      30:             }
      31:             #endregion
      32:         } 
      33:     
    </script>
     
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        </div>
        </form>
    </body>
    </html>

    说明

    (1) 本例演示向Cookies集合添加两个Cookie,读取完后删除;

    (2) 可以用两种方式向Cookies集合添加Cookie;

    (3) 一种方式是创建一个HttpCookie类的对象,设置相应属性,再通过Add方法将其添加到Cookies集合,既可以用Response.AppendCookie()方法,也可以用Response.Cookies.Add()方法;

    (4) 另一种是直接设置Cookies;

    (5) 读取时,要注意使用Server.HtmlEncode()。

    多值 Cookie

    MultiCookie.aspx 页面
    <%@ Page Language="C#" %>
     
    <!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>
     
        <script runat="server">
       1:  
       2:         protected void BtnCookie_Click(object sender, EventArgs e)
       3:         {
       4:             Response.Cookies["userInfo"]["userName"] = "anonymous ";
       5:             Response.Cookies["userInfo"]["lastVisit"] = DateTime.Now.ToString();
       6:             Response.Cookies["userInfo"].Expires = DateTime.Now.AddDays(1);
       7:             
       8:             //HttpCookie aCookie = new HttpCookie("userInfo");
       9:             //aCookie.Values["userName"] = "anonymous";
      10:             //aCookie.Values["lastVisit"] = DateTime.Now.ToString();
      11:             //aCookie.Expires = DateTime.Now.AddDays(1);
      12:             //Response.Cookies.Add(aCookie);
      13:             Response.Redirect("MultiCookieRec.aspx");
      14:         }
      15:     
    </script>
     
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:Button ID="BtnCookie" runat="server" OnClick="BtnCookie_Click" Text="BtnCookie" />
        </form>
    </body>
    </html>
    MultiCookieRec.aspx 页面
    <%@ Page Language="C#" %>
     
    <!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>
     
        <script runat="server">
       1:  
       2:         protected void Page_Load(object sender, EventArgs e)
       3:         {
       4:             if (Request.Cookies["userInfo"] != null)
       5:             {
       6:                 Response.Write(Server.HtmlEncode(Request.Cookies["userInfo"]["userName"]) + "</br>");
       7:                 Response.Write(Server.HtmlEncode(Request.Cookies["userInfo"]["lastVisit"]) + "</br>");
       8:                 //DateTime.Parse(Request.Cookies["userInfo"]["lastVisit"]);
       9:             }
      10:             //if (Request.Cookies["userInfo"] != null)
      11:             //{
      12:             //    System.Collections.Specialized.NameValueCollection UserInfoCookieCollection;
      13:             //    UserInfoCookieCollection = Request.Cookies["userInfo"].Values;
      14:             //    Response.Write(Server.HtmlEncode(UserInfoCookieCollection["userName"]) + "</br>");
      15:             //    Response.Write(Server.HtmlEncode(UserInfoCookieCollection["lastVisit"]) + "</br>");
      16:             //}
      17:             HttpCookie dCookie;
      18:             string cookieName;
      19:             int limit = Request.Cookies.Count;
      20:             for (int i = 0; i < limit; i++)
      21:             {
      22:                 cookieName = Request.Cookies[i].Name;
      23:                 dCookie = new HttpCookie(cookieName);
      24:                 dCookie.Expires = DateTime.Now.AddDays(-1);
      25:                 Response.Write("Cookies 的内容:" + cookieName + "</br>");
      26:                 Response.Cookies.Add(dCookie);
      27:             }
      28:         }
      29:     
    </script>
     
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        </div>
        </form>
    </body>
    </html>

    说明

    (1) 本例演示多值Cookie,读取后删除;

    (2) 可以用两种方式读取。

    限制 Cookie

    限制到某个文件夹或应用程序
    HttpCookie appCookie = new HttpCookie("AppCookie");
    appCookie.Value = "written " + DateTime.Now.ToString();
    appCookie.Expires = DateTime.Now.AddDays(1);
    appCookie.Path = "~/CookieApplication";
    Response.Cookies.Add(appCookie);
    Response.Redirect("CookieApplication/Default.aspx"); 

    说明

    (1) 路径可以是站点根目录下的物理路径,也可以是虚拟根目录;

    (2) 所产生的效果是 Cookie 只能用于CookieApplication文件夹或虚拟根目录中的页面。

    例如,如果您的站点名称为  www.contoso.com,则在前面示例中创建的 Cookie 将只能用于路径为 http://www.contoso.com/Application1/ 的页面以及该文件夹下的所有页面。

    但是,Cookie 将不能用于其他应用程序中的页面,如 http://www.contoso.com/Application2/http://www.contoso.com/ 中的页面。

    限制 Cookie 的域范围
    Response.Cookies["domain"].Value = DateTime.Now.ToString();
    Response.Cookies["domain"].Expires = DateTime.Now.AddDays(1);
    Response.Cookies["domain"].Domain = "contoso.com";

    说明

    (1) 默认情况下,Cookie 与特定域关联。

    例如,如果您的站点是  www.contoso.com,那么当用户向该站点请求任何页时,您编写的 Cookie 就会被发送到服务器。

    如果站点具有子域(例如,contoso.com、sales.contoso.com 和 support.contoso.com),则可以将 Cookie 与特定的子域关联。

    当以此方式设置域时,Cookie将仅可用于指定的子域中的页面。还可以使用 Domain 属性创建可在多个子域间共享的 Cookie。

    (2) 本例的Cookie将可用于主域,也可用于 sales.contoso.com 和 support.contoso.com 域。

    遍历 Cookie

    StringBuilder output = new StringBuilder();
    HttpCookie aCookie;
     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 />");
    }
    Response.Write(output.ToString());

    但是,上面这个示例有一个限制:

    (1) 如果 Cookie 有子键,则会以一个名称/值字符串来显示子键。

    (2) 可以读取 Cookie 的 HasKeys 属性,以确定 Cookie 是否有子键。如果有,则可以读取子键集合;

    (3) 通过索引值直接从 Values 集合中读取子键值。相应的子键名称可在 Values 集合的 AllKeys 成员中获得;

    (4) 还可以使用 Values 集合的 Keys 成员。但是,首次访问 AllKeys 属性时,该属性会被缓存;

    (5) 相比之下,每次访问 Keys 属性时,该属性都生成一个数组。因此在同一页请求的上下文内,在随后访问时,AllKeys 属性要快得多。

    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 />");
      }
    }
    Response.Write(output.ToString());

    或者,可将子键作为 NameValueCollection 对象提取:

    System.Text.StringBuilder output = new System.Text.StringBuilder();
    HttpCookie aCookie;
    string subkeyName;
    string subkeyValue;   
    for (int i = 0; i < Request.Cookies.Count; i++)
    {
      aCookie = Request.Cookies[i];
      output.Append("Name = " + aCookie.Name + "<br />");
      if (aCookie.HasKeys)
      {
        System.Collections.Specialized.NameValueCollection CookieValues =
            aCookie.Values;
        string[] CookieValueNames = CookieValues.AllKeys;
        for (int j = 0; j < CookieValues.Count; j++)
        {
          subkeyName = Server.HtmlEncode(CookieValueNames[j]);
          subkeyValue = Server.HtmlEncode(CookieValues[j]);
          output.Append("Subkey name = " + subkeyName + "<br />");
          output.Append("Subkey value = " + subkeyValue +
              "<br /><br />");
        }
      }
      else
      {
        output.Append("Value = " + Server.HtmlEncode(aCookie.Value) +
            "<br /><br />");
      }
    }
    Response.Write(output.ToString());

    更改 Cookie

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

    说明

    (1) 本代码演示如何更改存储用户对站点的访问次数的 Cookie 的值;

    (1) 不能直接修改 Cookie。更改 Cookie 的过程涉及创建一个有新值的新 Cookie,然后将其发送到浏览器来覆盖客户端上的旧版本 Cookie。

    确定浏览器是否支持 Cookie

    SupportCookie.aspx 页面
    <%@ Page Language="C#" %>
     
    <!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>
     
        <script runat="server">
       1:  
       2:         protected void Page_Load(object sender, EventArgs e)
       3:         {
       4:             if (!Page.IsPostBack)
       5:             {
       6:                 if (Request.QueryString["AcceptsCookies"] == null)
       7:                 {
       8:                     Response.Cookies["TestCookie"].Value = "ok";
       9:                     Response.Cookies["TestCookie"].Expires = DateTime.Now.AddMinutes(1);
      10:                     Response.Redirect("SupportCookieRec.aspx?redirect=" + Server.UrlEncode(Request.Url.ToString()));
      11:                 }
      12:                 else
      13:                 {
      14:                     Label1.Text = "Accept cookies = " + Server.UrlEncode(Request.QueryString["AcceptsCookies"]);
      15:                 }
      16:             }
      17:         }
      18:     
    </script>
     
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        </form>
    </body>
    </html>
    SupportCookieRec.aspx 页面
    <%@ Page Language="C#" %>
     
    <!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>
     
        <script runat="server">
       1:  
       2:         protected void Page_Load(object sender, EventArgs e)
       3:         {
       4:             string redirect = Request.QueryString["redirect"];
       5:             string acceptsCookies;
       6:             if (Request.Cookies["TestCookie"] == null)
       7:                 acceptsCookies = "no";
       8:             else
       9:             {
      10:                 acceptsCookies = "yes";
      11:                 Response.Cookies["TestCookie"].Expires = DateTime.Now.AddDays(-1);
      12:             }
      13:             Response.Redirect(redirect + "?AcceptsCookies=" + acceptsCookies, true);
      14:         }
      15:     
    </script>
     
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        </div>
        </form>
    </body>
    </html>

    说明

    (1) 用户可将其浏览器设置为拒绝接受 Cookie。在不能写入 Cookie 时不会引发任何错误。同样,浏览器也不向服务器发送有关其当前 Cookie 设置的任何信息;

    (2) 确定 Cookie 是否被接受的一种方法是尝试编写一个 Cookie,然后再尝试读取该 Cookie。如果无法读取您编写的 Cookie,则可以假定浏览器不接受 Cookie。

    下载 Demo

  • 相关阅读:
    JS设置CSS样式的几种方式
    jquery基础
    JS里面的两种运动函数
    JavaScript必须了解的知识点总结。
    JavaScript调用函数的方法
    纯CSS完成tab实现5种不同切换对应内容效果
    Web设计师值得收藏的10个jQuery特效
    jQuery的.bind()、.live()和.delegate()之间区别
    Web前端:11个让你代码整洁的原则
    js函数中参数的传递
  • 原文地址:https://www.cnblogs.com/liuning8023/p/2156757.html
Copyright © 2011-2022 走看看