在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>