2017-02-17 7 views
2

Я хранение и извлечение значений в печенье с помощью методов:Как использовать document.cookie для хранения и извлечения значений в массиве?

function setCookie(cname, cvalue, exdays) { 
    var d = new Date(); 
    d.setTime(d.getTime() + (exdays*24*60*60*1000)); 
    var expires = "expires="+ d.toUTCString(); 
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; 
}; 

и

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

Теперь мне нужно хранить/извлечение массивы подобным образом. Я знаю, что мне нужно создать массив как одну строку, а затем проанализировать его, но что это лучший способ сделать это?

ответ

3

Я рекомендую использовать JSON. Во-первых, вы преобразовать массив в строку JSON:

var array = ["one","two","three"]; 
var json_string = JSON.stringify(array); 

Затем вы устанавливаете печенье со строкой JSON в качестве значения.

setCookie("array", json_string, exdays); 

Затем, когда вы извлекаете строку JSON из файла cookie позже, преобразуйте его обратно в фактический массив.

var json_string = getCookie("array"); 
var array = JSON.parse(json_string); 
+1

Это работало отлично, спасибо! –

0

Предполагая, что вы хотите сохранить/восстановить несколько cookies.Your получить Cookie вещь почти делает это:

function getCookies() { 
var decodedCookie = decodeURIComponent(document.cookie); 
var ca = decodedCookie.split(';'); 
return ca.map(function(c){ 
    while (c.charAt(0) == ' ') { 
     c = c.substring(1); 
    } 
     return c.split("="); 
    } 
}); 
}; 

Вы просто должны вернуть все, а не первый, и вам необходимо удалить namedetection.

console.log(getCookies()); 

SetCookies:

function setCookies(Cookies,exp){ 
Cookies.forEach(function(el){setCookie(el[0],el[1],exp);}); 
} 

setCookies([ 
    ["name","value"] 
]);