Javascript 跨子域Cookie

Javascript 跨子域Cookie,javascript,cookies,Javascript,Cookies,我试图将我的cookie跨子域传送,但似乎无法将其传送。我希望域在cookie中为.apus.edu,但cookie为catalog.apus.edu、amu.apus.edu或apu.apus.edu 这是我的起始页。您将被分配一个默认cookie 当您单击AMU时,您将被分配AMU Cookie等 当您到达控制页面时,您应该拥有AMU或APU,否则我将为您指定默认值 我只希望域是.apus.edu,而不是每个子域 function Set_Cookie( name, value, expi

我试图将我的cookie跨子域传送,但似乎无法将其传送。我希望域在cookie中为.apus.edu,但cookie为catalog.apus.edu、amu.apus.edu或apu.apus.edu

这是我的起始页。您将被分配一个默认cookie

当您单击AMU时,您将被分配AMU Cookie等

当您到达控制页面时,您应该拥有AMU或APU,否则我将为您指定默认值

我只希望域是.apus.edu,而不是每个子域

function Set_Cookie( name, value, expires, path, domain, secure ) {
    // set time, it's in milliseconds
    var today = new Date();
    today.setTime( today.getTime() );

    /*
    if the expires variable is set, make the correct
    expires time, the current script below will set
    it for x number of days, to make it for hours,
    delete * 24, for minutes, delete * 60 * 24
    */
    if ( expires ) { expires = expires * 1000 * 60 * 60 * 24; }
    var expires_date = new Date( today.getTime() + (expires) );

    document.cookie = name + "=" +escape( value ) +
    ( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
    ( ( path ) ? ";path=" + path : "" ) +
    ( ( domain ) ? ";domain=" + domain : "" ) +
    ( ( secure ) ? ";secure" : "" );
}

function Get_Cookie( check_name ) {
    // first we'll split this cookie up into name/value pairs
    // note: document.cookie only returns name=value, not the other components
    var a_all_cookies = document.cookie.split( ';' );
    var a_temp_cookie = '';
    var cookie_name = '';
    var cookie_value = '';
    var b_cookie_found = false; // set boolean t/f default f

    for ( i = 0; i < a_all_cookies.length; i++ ) {
        // now we'll split apart each name=value pair
        a_temp_cookie = a_all_cookies[i].split( '=' );

        // and trim left/right whitespace while we're at it
        cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

        // if the extracted name matches passed check_name
        if ( cookie_name == check_name ) {
            b_cookie_found = true;
            // we need to handle case where cookie has no value but exists (no = sign, that is):
            if ( a_temp_cookie.length > 1 ) {
                cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
            }
            // note that in cases where cookie is initialized but no value, null is returned
            return cookie_value;
            break;
        }
        a_temp_cookie = null;
        cookie_name = '';
    }
    if ( !b_cookie_found ) {
        return null;
    }
}

// this deletes the cookie when called
function Delete_Cookie( name, path, domain ) {
    if ( Get_Cookie( name ) ) document.cookie = name + "=" +
    ( ( path ) ? ";path=" + path : "") +
    ( ( domain ) ? ";domain=" + domain : "" ) +
    ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}

var CookieNameDefault = 'Default Cookie';
var CookieValueDefault = 'Default Cookie';

var CookieNameAMU = 'AMU Cookie';
var CookieValueAMU = 'AMU Cookie';

var CookieNameAPU = 'APU Cookie';
var CookieValueAPU = 'APU Cookie';

var cAMU = Get_Cookie(CookieNameAMU); 
var cAPU = Get_Cookie(CookieNameAPU); 

if (window.location.href.indexOf("www.amu.apus.edu/_test/sitecat/cookie.htm") >= 0) { //delete APU & Default cookie and set AMU cookie
    Delete_Cookie(CookieNameAPU, '/', '');
    Delete_Cookie(CookieNameDefault, '/', '');
    Set_Cookie(CookieNameAMU, CookieValueAMU, '', '/', '', '');
    alert(CookieNameAMU);
}

if (window.location.href.indexOf("www.apu.apus.edu/_test/sitecat/cookie.htm") >= 0) { //delete AMU & Default cookie and set APU cookie
    Delete_Cookie(CookieNameAMU, '/', '');
    Delete_Cookie(CookieNameDefault, '/', '');
    Set_Cookie(CookieNameAPU, CookieValueAPU, '', '/', '', '');
    alert(CookieNameAPU);
}

if (cAMU || cAPU) { 
    // check if you have any of these two cookies if so then do nothing
}
else { // if you don't have any cookie then lets give you the default cookie
    Set_Cookie( CookieNameDefault, CookieValueDefault, '', '/', '', '' ); 
    alert(CookieNameDefault);
}
函数集\u Cookie(名称、值、过期、路径、域、安全){
//设置时间,以毫秒为单位
var today=新日期();
today.setTime(today.getTime());
/*
如果设置了expires变量,请进行正确的
过期时间,将设置下面的当前脚本
它持续x天,持续数小时,
删除*24,对于分钟,删除*60*24
*/
如果(过期){expires=expires*1000*60*60*24;}
var expires_date=新日期(today.getTime()+(expires));
document.cookie=名称+“=”+转义(值)+
((过期)?“expires=“+expires\u date.TogmString():”)+
((路径)?“路径=”+path:)+
((域)?“域=”+域:“”)+
((安全)?“安全”:“);
}
函数Get\u Cookie(检查\u名称){
//首先,我们将此cookie拆分为名称/值对
//注意:document.cookie只返回name=value,不返回其他组件
var a_all_cookies=document.cookie.split(“;”);
变量a_temp_cookie=“”;
变量cookie_name=“”;
var\u值=“”;
var b_cookie_found=false;//设置布尔t/f默认值f
对于(i=0;i1){
cookie\u value=unescape(一个临时cookie[1]。替换(/^\s+\s+$/g,);
}
//请注意,在cookie已初始化但没有值的情况下,将返回null
返回cookie\u值;
打破
}
a_temp_cookie=null;
cookie_name='';
}
如果(!b_cookie_找到){
返回null;
}
}
//这将在调用时删除cookie
函数Delete_Cookie(名称、路径、域){
if(Get_Cookie(name))document.Cookie=name+“=”+
((路径)?“路径=”+path:)+
((域)?“域=”+域:“”)+
“到期日=1970年1月1日星期四00:00:01 GMT”;
}
var CookieNameDefault='defaultcookie';
var CookieValueDefault='defaultcookie';
var CookieNameAMU='AMU Cookie';
var CookieValueAMU=‘AMU Cookie’;
var CookieNameAPU='APU Cookie';
var CookieValueAPU='APU Cookie';
var cAMU=获取饼干(CookieNameAMU);
var cAPU=获取Cookie(CookieNameAPU);
如果(window.location.href.indexOf(“www.amu.apus.edu/_test/sitecat/cookie.htm”)>=0{//删除APU和默认cookie并设置amu cookie
删除Cookie(CookieNameAPU,“/”,“”;
删除Cookie(CookieAmeDefault,“/”,“”;
设置Cookie(CookieAmeAmu、CookieAmeValueAmu、、“/”、“,”);
警惕(CookieNameAMU);
}
如果(window.location.href.indexOf(“www.apu.apus.edu/_test/sitecat/cookie.htm”)>=0{//删除AMU和默认cookie并设置apu cookie
删除Cookie(CookieNameAMU,“/”,”;
删除Cookie(CookieAmeDefault,“/”,“”;
设置Cookie(CookieNameAPU、CookieValueAPU、、“/”、“,”);
警报(CookieNameAPU);
}
如果(cAMU | | cAPU){
//检查您是否有这两个cookies中的任何一个,如果有,则什么也不做
}
否则{//如果您没有任何cookie,那么让我们为您提供默认cookie
设置Cookie(CookieNameDefault、CookieValueDefault、“,/”、“,”);
警报(默认);
}

我不能100%确定这一大块代码中发生了什么。但是,如果您将Cookie域设置为
.apus.edu
,则它将可用于
*.apus.edu

也就是说,你有:

Set_Cookie(CookieNameAMU, CookieValueAMU, '', '/', '', '');
应该是

Set_Cookie(CookieNameAMU, CookieValueAMU, '', '/', '.apus.edu', '');

嗯,我不是100%确定在这一大块代码中发生了什么。但是,如果您将Cookie域设置为
.apus.edu
,则它将可用于
*.apus.edu

也就是说,你有:

Set_Cookie(CookieNameAMU, CookieValueAMU, '', '/', '', '');
应该是

Set_Cookie(CookieNameAMU, CookieValueAMU, '', '/', '.apus.edu', '');

您应该指出可以读取此cookie的更高域 如果设置catalog.apus.edu,则可以通过subdomain.catalog.apus.edu访问,但不能通过apus.edu或other.apus.edu访问

因此,您必须将域设置为apus.edu,以便可以通过apus.edu、www.apus.edu、anysubdomain.apus.edu等访问

Set_Cookie(CookieNameAMU, CookieValueAMU, '', '/', 'apus.edu' , '');

您应该指出可以读取此cookie的更高域 如果设置catalog.apus.edu,则可以通过subdomain.catalog.apus.edu访问,但不能通过apus.edu或other.apus.edu访问

因此,您必须将域设置为apus.edu,以便可以通过apus.edu、www.apus.edu、anysubdomain.apus.edu等访问

Set_Cookie(CookieNameAMU, CookieValueAMU, '', '/', 'apus.edu' , '');

成功了!我非常感激。我还想问一下,当我关闭浏览器时,我注意到我的cookie会自动重置为默认cookie。我认为cookie的意义在于,在你删除cookie(或者它们过期)之前,当你返回站点时,cookie将是持久的?@Evan cookie应该是持久的。使用chrome调试工具中的资源管理器检查Cookie。现在它是持久的,我指定它要到一整年才会过期。由于没有日期,它将在浏览器关闭时过期。Set_Cookie(CookieNameAMU、CookieValueAMU、'365'、'/'、'apus.edu'、'';再次感谢你的大力帮助。我现在有一个完整的跟踪系统。这就成功了!我非常感激。我可以问一下我注意到我的厨子了吗