zoukankan      html  css  js  c++  java
  • 顶级域名和二级域名共享cookie及相互删除cookie

    在CSDN看到一个cookie设置domain时,如何删除的问题,

    自己也只知道domain设置为顶级域名时可以被其他二级域名共享,但是如何删除还是有一点搞不清楚,所以特意测试了下cookie和domain之间的关系,下面是一些测试结果的总结

    设置cookie
      非顶级域名,如二级域名或者三级域名,设置的cookie的domain只能为顶级域名或者二级域名或者三级域名本身,不能设置其他二级域名的cookie,否则cookie无法生成。

      顶级域名只能设置domain为顶级域名,不能设置为二级域名或者三级域名,否则cookie无法生成。

      如www.abc.com能设置domain为abc.com或者www.abc.com,但不能设置domain为news.abc.com,这样cookie不会生成。

    +展开
    -C#
    HttpCookie hc = new HttpCookie("abc", "123");
    hc.Domain = "news.abc.com";//////
    hc.Expires = DateTime.Now.AddDays(1);
    Response.Cookies.Add(hc);//==========这样cookie无法生成



      abc.com只能设置domain为abc.com,不能为www.abc.com等2级域名,如果设置为其他domain二级域名,cookie无法生成。

    +展开
    -C#
    HttpCookie hc = new HttpCookie("abc", "123");
    hc.Domain = "www.abc.com";///////////
    hc.Expires = DateTime.Now.AddDays(1);
    Response.Cookies.Add(hc);//==========这样cookie无法生成



      未指定domain时,默认的domain为用哪个域名访问就是哪个,如果为顶级域名访问,那么可以被其他2级域名共享。


    读取cookie
      二级域名能读取设置了domain为顶级域名或者自身的cookie,不能读取其他二级域名domain的cookie。所以要想cookie在多个二级域名中共享,需要设置domain为顶级域名,这样就可以在所有二级域名里面或者到这个cookie的值了。

      顶级域名只能获取到domain设置为顶级域名的cookie,其他domain设置为二级域名的无法获取。



    删除cookie
      1)顶级域名的cookie在顶级域名或者2级域名都可以删除,但是用非顶级域名访问的网站要删除顶级域名的cookie,需要设置获取到的cookie的domain为顶级域名,这样才能删除顶级域名的cookie,否则无法删除,默认的会删除访问的域名下对应的cookie,而不是顶级域名的。

    +展开
    -C#
    HttpCookie hc = Request.Cookies["abc"];
    if (hc != null)
    {
        hc.Domain = "abc.com";/////指定为顶级域名则可以在其他二级域名中删除顶级域名的cookie,否则默认删除的是本域名下的cookie
        Response.Write("删除域名Cookie!
    ");
        hc.Expires = DateTime.Now.AddDays(-1);
        Response.Cookies.Add(hc);
    }


      2)删除2级域名自身生成的cookie不需要设置domain,可以直接删除。

      下面为完整的测试示例,大家自己可以测试一下,注意后面标注了/////////的代码,这些是关键,也注意修改修改代码中设置的域名,我这里为了方便,直接设置了系统hosts文件将abc.com作为测试。

    +展开
    -HTML
    <%@ Page Language="C#" %>
    <script runat="server">
        private void SetCookie(string name,string value,string domain)
        {
            HttpCookie hc = new HttpCookie(name, value);
            hc.Domain = domain;////////
            hc.Expires = DateTime.Now.AddDays(1);
            Response.Cookies.Add(hc);
        }
        private void ReadCookie(string name)
        {
            HttpCookie hc = Request.Cookies[name];
            if (hc != null) Response.Write("设置的Cookie为:" + hc.Value+"|"+hc.Domain);
            else Response.Write("Cookie值为空!");
        }
        private void DeleteCookie(string name,string domain)
        {
            HttpCookie hc = Request.Cookies[name];
            if (hc != null)
            {
              hc.Domain = domain;////////
                Response.Write("删除域名Cookie!
    ");
                hc.Expires = DateTime.Now.AddDays(-1);
                Response.Cookies.Add(hc);
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {

         //  SetCookie("abc", "abc.com--" + DateTime.Now.ToString(), "www.abc.com");
            ReadCookie("abc");
      // DeleteCookie("abc","abc.com");
          
        }
    script> 
  • 相关阅读:
    SGU 495 Kids and Prizes 概率DP 或 数学推理
    poj 2799 IP Networks 模拟 位运算
    uva 202 Repeating Decimals 模拟
    poj 3158 Kickdown 字符串匹配?
    uva 1595 Symmetry 暴力
    uva 201 Squares 暴力
    uva 1594 Ducci Sequence 哈希
    uva 1368 DNA Consensus String 字符串
    数字、字符串、列表的常用操作
    if条件判断 流程控制
  • 原文地址:https://www.cnblogs.com/tdalcn/p/8342774.html
Copyright © 2011-2022 走看看