• 顶级域名和二级域名共享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> 
  • 相关阅读:
    【五校联考5day1】登山
    非旋Treap及其可持久化
    自然数幂求和——第二类Strling数
    [JZOJ6011] 【NOIP2019模拟1.25A组】天天爱跑步
    [JZOJ5232] 【NOIP2017模拟A组模拟8.5】带权排序
    FreeRTOS 任务通知模拟消息邮箱
    Python爬虫技术:爬虫时如何知道是否代理ip伪装成功?
    Python网络爬虫入门实战(爬取最近7天的天气以及最高/最低气温)
    Python numpy的基本操作你一般人都不会
    如何正确的使用Python解释器?你之前肯定用错了
  • 原文地址:https://www.cnblogs.com/tdalcn/p/8342774.html
Copyright © 2020-2023  润新知