2011-01-06 83 views
0

我刚刚学习JS cookies。当人碰到一个按钮时,我可以保存cookie,但似乎周期的长度不正确。我需要它是15天,但它一直说时间的长度是直到会议结束(http://screencast.com/t/ea7TOoGTnbA)。JavaScript Cookie长度

这里是我用下面的代码:

<script type="text/javascript"> 
    function getCookie(w){ 
    cName = ""; 
    pCOOKIES = new Array(); 
    pCOOKIES = document.cookie.split('; '); 
    for(bb = 0; bb < pCOOKIES.length; bb++){ 
     NmeVal = new Array(); 
     NmeVal = pCOOKIES[bb].split('='); 
     if(NmeVal[0] == w){ 
      cName = unescape(NmeVal[1]); 
     } 
    } 
    return cName; 
} 
function printCookies(w){ 
    cStr = ""; 
    pCOOKIES = new Array(); 
    pCOOKIES = document.cookie.split('; '); 
    for(bb = 0; bb < pCOOKIES.length; bb++){ 
     NmeVal = new Array(); 
     NmeVal = pCOOKIES[bb].split('='); 
     if(NmeVal[0]){ 
      cStr += NmeVal[0] + '=' + unescape(NmeVal[1]) + '; '; 
     } 
    } 
    return cStr; 
} 
function setCookie(name, value, expires, path, domain, secure){ 
    document.cookie = name + "=" + escape(value) + "; "; 

    if(expires){ 
     expires = setExpiration(expires); 
     document.cookie += "expires=" + expires + "; "; 
    } 
    if(path){ 
     document.cookie += "path=" + path + "; "; 
    } 
    if(domain){ 
     document.cookie += "domain=" + domain + "; "; 
    } 
    if(secure){ 
     document.cookie += "secure; "; 
    } 
} 

function setExpiration(cookieLife){ 
    var today = new Date(); 
    var expr = new Date(today.getTime() + cookieLife * 60 * 60 * 10); 
    return expr.toGMTString(); 
} 

</script> 

<script language="JavaScript"> 
// set a cookie which will expire in 3 days and be accessible site wide 
setCookie('drunkdriving_cta_overlay', 'Yes', 3, '/'); 
</script> 


<script language="JavaScript"><!-- 
document.write(getCookie("drunkdriving_cta_overlay")); 
//--> 
</script> 

<?php if (isset($_COOKIE["drunkdriving_cta_overlay"])) {?> 
hello? 
<?php } else { ?> 
goodby 
<?php } ?> 

任何帮助将不胜感激。

+0

而不是重新发明轮子,你可能希望只用别人的Cookie代码。如果你愿意使用jQuery,你可以使用[jQuery cookie插件](http://projects.zzzzbov.com/jquery-cookie-plugin/jquery.cookie.js)我写了一段时间(它不'也真的需要jQuery)。 – zzzzBov 2011-01-06 22:58:59

回答

1

看起来问题不在于设置cookie,而是在日期计算中。尝试使用以下代码替换setExpiration方法:

function setExpiration(cookieLife){ 
    var expires = new Date(); 
    expires.setDate(expires.getDate()+cookieLife); 
    return expires.toGMTString(); 
} 

您的方法中的日期计算似乎无法正常工作。

编辑:

请尝试改用此代码。我想我找到了问题。

<script type="text/javascript"> 
    function getCookie(w){ 
    cName = ""; 
    pCOOKIES = new Array(); 
    pCOOKIES = document.cookie.split(';'); 
    for(bb = 0; bb < pCOOKIES.length; bb++){ 
     NmeVal = new Array(); 
     NmeVal = pCOOKIES[bb].split('='); 
     if(NmeVal[0] == w){ 
      cName = unescape(NmeVal[1]); 
     } 
    } 
    return cName; 
} 
function printCookies(w){ 
    cStr = ""; 
    pCOOKIES = new Array(); 
    pCOOKIES = document.cookie.split(';'); 
    for(bb = 0; bb < pCOOKIES.length; bb++){ 
     NmeVal = new Array(); 
     NmeVal = pCOOKIES[bb].split('='); 
     if(NmeVal[0]){ 
      cStr += NmeVal[0] + '=' + unescape(NmeVal[1]) + ';'; 
     } 
    } 
    return cStr; 
} 
function setCookie(name, value, expires, path, domain, secure){ 
    var cookie = name + "=" + escape(value); 

    if(expires){ 
     expires = setExpiration(expires); 
     cookie += ";expires=" + expires; 
    } 
    if(path){ 
     cookie += ";path=" + path; 
    } 
    if(domain){ 
     cookie += ";domain=" + domain; 
    } 
    if(secure){ 
     cookie += ";secure"; 
    } 
    document.cookie = cookie; 
} 

function setExpiration(cookieLife){ 
    var expires = new Date(); 
    expires.setDate(expires.getDate()+cookieLife); 
    return expires.toGMTString(); 
} 

</script> 

<script language="JavaScript"> 
// set a cookie which will expire in 3 days and be accessible site wide 
setCookie('drunkdriving_cta_overlay', 'Yes', 3, '/'); 
</script> 


<script language="JavaScript"><!-- 
document.write(getCookie("drunkdriving_cta_overlay")); 
//--> 
</script> 
+0

我按照你所说的更新了代码,它仍然说我的cookie的时间段只有在会话结束之前。 – HollerTrain 2011-01-07 15:24:44

+0

查看我更新的答案 - 我想我找到了问题。 – 2011-01-07 15:41:50

+0

哇,它现在有正确的时间,但我的打印声明不工作:( – HollerTrain 2011-01-07 18:24:56