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> 
  • 相关阅读:
    UTF8编码的空格(194 160)问题
    经典sql语句大全
    Workflow 4.0 中三种方式实现workflow的触发调用
    VS2010 常用快捷键
    JS验证密码安全级别
    JS零散知识记录
    MVC project on VS2010 error : The project type is not supported by this installation
    解决IronPython没有三元运算符的问题
    何时何地不能使用泛型
    今天写的代码,可惜没有用上,但想想可能以后还能用上吧。
  • 原文地址:https://www.cnblogs.com/w10234/p/5415946.html
Copyright © 2011-2022 走看看