顶级域名和二级域名共享cookie及相互删除cookie

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


设置cookie

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


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


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



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,不能为等2级域名,如果设置为其他domain二级域名,cookie无法生成。

Httpcookie hc = new Httpcookie("abc", "123");
hc.Domain = "";///////////
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,而不是顶级域名的。


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作为测试。

<%@ 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(), "");
        Readcookie("abc");
  // Deletecookie("abc","abc.com");
       
    }
script>

猜你喜欢

字节运算

2020-12-20

有多少数据被发送到在页面之间的表单操作呢? Request.TotalBytes会告诉你。试图限制从桌面上传到服务器的项目大小是特别有用的。%bytecount = Request.TotalBytesresponse.write bytecount%

ASP-条件语句

2020-12-14

有时,当我们写代码时,我们要为作出不同的决定而执行不同的操作。我们可以使用条件语句中的代码来做到这一点。条件语句是一套用于执行基于不同条件的不同动作的命令。为了支持这一点,VBScript中提供了一系列的话,

ASP BASE64加解密

2020-11-30

%' OPTION EXPLICIT const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" dim newline dim Base64EncMap(63) dim Base64DecMap(127) '初始化函数 PUBLIC SUB initCodecs(

手机电商网站实用的客服代码及调用微信

2020-11-26

手机电商网站实用的客服代码及调用微信:调用手机QQ:a href="mqq://im/chat?chat_type=wpauin=84299915version=1src_type=web" target="_blank"咨询客服/a调用微信的方法:a href="weixin://" onClick="PIWI_SUBMIT.

ASP读取、解析JSON数据

2020-11-25

第一种Jscript方式:script language="jscript" runat="server"Array.prototype.get = function(x) { return this[x]; };function parseJSON(strJSON) { return eval("(" + strJSON + ")"); }/s

通过区域来搜索数据库

2020-11-22

提供搜索数据库能让用户查询你目标哪个元件的功能。然而允许用户针对数据库的分配,他们会查询给出额外值。在这个例子中,利用我们的美国州的数据库(州,州的名称和首都),用户会搜索任何的三个区域(通过下拉菜单

X
返回
顶部