2011-01-06 82 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