頂級域名和二級域名共享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> 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM