2008-11-04 40 views

Trả lời

26

bị đánh cắp từ 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); 
} 

sử dụng nó:

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

như được chỉ ra trong các ý kiến, bạn nên bỏ vào một int vì cookie là được lưu trữ và trả về dưới dạng chuỗi. Sử dụng foo++ hoặc ++foo thực sự sẽ bỏ cho bạn, nhưng nó an toàn hơn để biết chính xác những gì bạn đang làm việc với:

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

readCookie trả về chuỗi con, bạn nên đặt nó dưới dạng số khi tăng 1, nếu không bạn sẽ có , 1, 11, 111, 1111 ... – CMS

+0

Bạn đang bỏ lỡ lối thoát và unescape cho giá trị – hultqvist

+2

Lưu ý rằng toGMTString hiện không còn được dùng để ủng hộ toUTCString – BeauCielBleu

7

Hầu hết các chức năng cũ cookie handling Tôi đã nhìn thấy sử dụng thao tác chuỗi đơn giản để lưu trữ một giá trị nhặt đồ, như this Ví dụ, bạn có thể sử dụng các thư viện khác, như cookie-js, một nhỏ (< 100 dòng) tiện ích cho Cookie truy cập.

Cá nhân tôi sử dụng jQuery cho các dự án của tôi, và tôi sử dụng jQuery Cookie Plugin, nó thực sự đơn giản để sử dụng:

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

cách tốt nhất luôn là đơn giản nhất:

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; 
} 

các chức năng mong đợi giá trị là một chuỗi đơn giản, nhưng bạn luôn có thể JSON.stringify nó nếu bạn muốn hoặc có thể làm điều gì đó khác với nó ...

Các vấn đề liên quan