2008-11-04 79 views

回答

26

被盗从http://www.quirksmode.org/js/cookies.html#script

function createCookie(name,value,days) { 
    if (days) { 
     var date = new Date(); 
     date.setTime(date.getTime()+(days*24*60*60*1000)); 
     var expires = "; expires="+date.toUTCString(); 
    } 
    else var expires = ""; 
    document.cookie = name+"="+value+expires+"; path=/"; 
} 

function readCookie(name) { 
    var nameEQ = name + "="; 
    var ca = document.cookie.split(';'); 
    for(var i=0;i < ca.length;i++) { 
     var c = ca[i]; 
     while (c.charAt(0)==' ') c = c.substring(1,c.length); 
     if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); 
    } 
    return null; 
} 

function eraseCookie(name) { 
    createCookie(name,"",-1); 
} 

var oldCount = parseInt(readCookie('hitCount'), 10) || 0; 
createCookie('hitCount', oldCount + 1, 7); 

正如注释中所指出的那样,您应该将Cookie转换为int存储并作为字符串返回。使用foo++++foo实际上会投给你,但它的安全知道你正在使用什么:

var x = "5"; // x = "5" (string) 
x += 1;  // x = "51" (string!) 
x += 5;  // x = "515" (string!) 
++x;   // x = 516 (number) 
+0

readCookie返回一个子字符串,你应该把它作为一个数字时增加1,否则你将有,1,11,111,1111 ... – CMS 2008-11-04 06:58:58

7

大多数的旧Cookie处理功能我已经看到了使用简单的字符串操作用于存储检索值,比如this例如,你可以使用其他的库,例如cookie-js,小(< 100线)实用程序,用于饼干访问。

我个人使用jQuery我的项目,我用的是jQuery Cookie Plugin,这是非常简单的使用方法:用它

var cookieName = "increment"; 

if ($.cookie(cookieName) == null){ 
    $.cookie(cookieName, 1, { expires: 10 }); 
}else{ 
    var newValue = Number($.cookie(cookieName)) + 1; 
    $.cookie(cookieName, newValue, { expires: 10 }); 
} 
0

最好的办法就是始终是最简单的:

function getCookie(name) { 
    return (name = (document.cookie + ';').match(new RegExp(name + '=.*;'))) && name[0].split(/=|;/)[1]; 
} 

// the default lifetime is 365 days 
function setCookie(name, value, days) { 
    var e = new Date; 
    e.setDate(e.getDate() + (days || 365)); 
    document.cookie = name + "=" + value + ';expires=' + e.toUTCString() + ';path=/;domain=.' + document.domain; 
} 

这些功能所期望的价值是一个简单的字符串,但你可以随时JSON.stringify它,如果你想或可能做别的事情...

相关问题