2010-12-17 51 views
15

Có thể tạo cookie bằng mảng không?Tạo mảng trong cookie với javascript

Tôi muốn lưu trữ a[0]='peter', a['1']='esther', a['2']='john' trong cookie bằng JavaScript.

+1

Với tính chất của mảng, một cooke (kích thước giới hạn) là nơi cuối cùng tôi cố gắng lưu trữ một/phương pháp lưu trữ cuối cùng mà tôi muốn sử dụng. – symcbean

Trả lời

7

Cookie chỉ có thể giữ các chuỗi. Nếu bạn muốn mô phỏng một mảng, bạn cần serialize nó và deserialize nó.

Bạn có thể thực hiện việc này bằng thư viện JSON.

+0

Tôi chỉ cần lưu một mảng chuỗi. Có thể sử dụng phương pháp đơn giản hơn không? – limfreak

+1

Đây là một phương pháp đơn giản. Có những phương pháp đơn giản hơn, nhưng chúng chỉ đơn giản hơn một chút và khá ít mạnh mẽ hơn. – Quentin

+0

Chắc chắn sử dụng JSON. Bạn có thể lưu trữ "['foo', 'bar']" và đánh giá nó sau nhưng nó có thể là một thảm họa về hiệu suất và độ ổn định. –

1

Tạo mảng trong cookie bằng cách sử dụng jquery?

var list = new cookieList("test"); $(img).one('click', function(i){ while($('.selected').length < 3) { 
    $(this).parent() 
     .addClass("selected") 
     .append(setup.config.overlay); 

    //$.cookie(setup.config.COOKIE_NAME, d, setup.config.OPTS); 
    var index = $(this).parent().index(); 

    // suppose this array go into cookies.. but failed 
    list.add(index); 

    var count = 'You have selected : <span>' + $('.selected').length + '</span> deals'; 
    if($('.total').length){ 
     $('.total').html(count); 
    } 

} }); 
1

Tôi đồng ý với các nhận xét khác - bạn không nên làm điều này và bạn nên sử dụng JSON. Tuy nhiên, để trả lời câu hỏi của bạn, bạn có thể hack điều này bằng cách lưu trữ mảng dưới dạng chuỗi được phân tách bằng dấu phẩy. Cho phép nói rằng bạn muốn tiết kiệm một mảng javascript sau vào một cookie:

var a = ['peter','esther','john']; 

Bạn có thể định nghĩa một chuỗi cookie, sau đó lặp qua mảng:

// Create a timestamp in the future for the cookie so it is valid 
var nowPreserve = new Date(); 
var oneYear = 365*24*60*60*1000; // one year in milliseconds 
var thenPreserve = nowPreserve.getTime() + oneYear; 
nowPreserve.setTime(thenPreserve); 
var expireTime = nowPreserve.toUTCString(); 

// Define the cookie id and default string 
var cookieId = 'arrayCookie'; 
var cookieStr = ''; 

// Loop over the array 
for(var i=0;i<a.length;i++) { 
    cookieStr += a[i]+','; 
} 

// Remove the last comma from the final string 
cookieStr = cookieStr.substr(0,cookieStr.length-1); 

// Now add the cookie 
document.cookie = cookieId+'='+cookieStr+';expires='+expireTime+';domain='+document.domain; 

Trong ví dụ này, bạn sẽ nhận được sau cookie sẽ được lưu trữ (nếu tên miền của bạn là www.example.com):

arrayCookie=peter,ester,john;expires=1365094617464;domain=www.example.com 
+3

Tôi biết điều này là cũ, nhưng bạn có thể vừa thực hiện var a = ['peter', 'esther', 'john']. Join(); Và sau đó loại bỏ các vòng lặp và chất nền. – cazgp

+0

vâng ... @ cazgp ....nhưng tốt để xem loại bỏ ',' ở trên –

39

Như bạn có thể đọc trong này topic:

Bạn kết hợp sử dụng plugin jQuery.cookieJSON và giải quyết sự cố của mình.

Khi bạn muốn lưu trữ một mảng, bạn tạo một mảng trong JS và sử dụng JSON.stringify để biến nó thành một chuỗi và lưu trữ với $.cookie('name', 'array_string')

var myAry = [1, 2, 3]; 
$.cookie('name', JSON.stringify(myAry)); 

Khi bạn muốn truy xuất các mảng bên trong cookie, bạn sử dụng $.cookie('name') để truy lại giá trị cookie và sử dụng JSON.parse để truy xuất mảng từ chuỗi.

var storedAry = JSON.parse($.cookie('name')); 
//storedAry -> [1, 2, 3] 
1

tôi thêm vào mã bên dưới Script (xem đoạn mã sau) vào một tập tin javascript gọi CookieMonster.js.

Đó là một wrapper xung quanh đoạn hiện tại từ http://www.quirksmode.org/js/cookies.html

Nó hoạt động với mảng và chuỗi, nó sẽ automagically thoát mảng của bạn/chuỗi của dấu phẩy , và dấu chấm phẩy ; (mà không được xử lý trong các đoạn ban đầu).

Tôi đã liệt kê việc sử dụng đơn giản và một số cách sử dụng tiền thưởng mà tôi đã sử dụng.

Cách sử dụng:

//set cookie with array, expires in 30 days 
var newarray = ['s1', 's2', 's3', 's4', 's5', 's6', 's7']; 
cookiemonster.set('series', newarray, 30); 

var seriesarray = cookiemonster.get('series'); //returns array with the above numbers 

//set cookie with string, expires in 30 days 
cookiemonster.set('sample', 'sample, string;.', 30); 

var messagestring = cookiemonster.get('sample'); //returns string with 'sample, string;.' 

Tiền thưởng:

//It also conveniently contains splice and append (works for string or array (single string add only)). 

//append string 
cookiemonster.append('sample', ' add this', 30); //sample cookie now reads 'sample, string;. add this' 

//append array 
cookiemonster.append('series', 's8', 30); //returns array with values ['s1', 's2', 's3', 's4', 's5', 's6', 's7', 's8'] 

//splice 
cookiemonster.splice('series', 1, 2, 30); //returns array with values ['s1', 's4', 's5', 's6', 's7', 's8'] 

CookieMonster.js:

 var cookiemonster = new Object(); 

     cookiemonster.append = function (cookieName, item, expDays) { 
      item = cm_clean(item); 
      var cookievalue = cookiemonster.get(cookieName); 
      if (cookievalue instanceof Array) { 
       cookievalue[cookievalue.length] = item; 
       cm_createCookie(cookieName, cm_arrayAsString(cookievalue), expDays); 
      } else { 
       cm_createCookie(cookieName, cookievalue + item, expDays); 
      } 
     }; 

     cookiemonster.splice = function (cookieName, index, numberToRemove, expDays) { 
      var cookievalue = cookiemonster.get(cookieName); 
      if (cookievalue instanceof Array) { 
       cookievalue.splice(index, numberToRemove); 
       cm_createCookie(cookieName, cm_arrayAsString(cookievalue), expDays); 
      } 
     }; 



     cookiemonster.get = function (cookieName) { 
      var cstring = cm_readCookie(cookieName); 
      if (cstring.indexOf('<#&type=ArrayVals>') != -1) { 

       var carray = cstring.split(','); 

       for (var i = 0; i < carray.length; i++) { 
         carray[i] = cm_dirty(carray[i]); 
       } 

       if (carray[0] == '<#&type=ArrayVals>') { 
        carray.splice(0, 1); 
       } 

       return carray; 

      } else { 

       return cm_dirty(cstring); 
      } 
     }; 

     cookiemonster.set = function (cookieName, value, expDays) { 
      if (value instanceof Array) { 
       cm_createCookie(cookieName, cm_arrayAsString(value), expDays); 
      } 
      else { cm_createCookie(cookieName, cm_clean(value), expDays); } 

     }; 

     cookiemonster.eraseCookie = function (name) { 
      cm_createCookie(name, "", -1); 
     }; 

     function cm_replaceAll(str, find, replace) { 

      return str.replace(new RegExp(find, 'g'), replace); 
     }; 

     function cm_clean(ret) { 
      ret = cm_replaceAll(ret.toString(), ',', '&#44'); 
      ret = cm_replaceAll(ret.toString(), ';', '&#59'); 
      return ret; 
     }; 
     function cm_dirty(ret) { 
      ret = cm_replaceAll(ret, '&#44', ','); 
      ret = cm_replaceAll(ret, '&#59', ';'); 
      return ret; 
     }; 

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

     function cm_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 cm_arrayAsString(array) { 
      var ret = "<#&type=ArrayVals>"; //escapes, tells that string is array 
      for (var i = 0; i < array.length; i++) { 
        ret = ret + "," + cm_clean(array[i]); 
      } 
      return ret; 
     }; 
0

Ví dụ bạn có thể làm điều đó khá dễ dàng:

  • Hãy Cookies:

    ///W3Schools Cookie Code: 
    function setCookie(cname,cvalue,exdays) { 
        var d = new Date(); 
        d.setTime(d.getTime() + (exdays*24*60*60*1000)); 
        var expires = "expires=" + d.toGMTString(); 
        document.cookie = cname + "=" + cvalue + ";" + expires + ";"; 
    } 
    
    function getCookie(cname) { 
        var name = cname + "="; 
        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); 
         } 
         if (c.indexOf(name) == 0) { 
          return c.substring(name.length, c.length); 
         } 
        } 
        return ""; 
    } 
    
    ///My Own Code: 
    for(a=0;a<b.length;a++){ 
        setCookie(b[a],b[a],periodoftime); 
    } 
    
  • Lấy Array:

    for(a=0;a<b.length;a++){ 
        b[a] = getCookie(b[a]) 
    } 
    

Đối với bất kỳ mảng với các loại giá trị khác ngoài chuỗi:

  • Hãy Cookies:

    ///Replace MyCode above With: 
    if(typeof b[a] === 'string'){ 
        setCookie(b[a],b[a],periodoftime); 
    }else{ 
        setCookie(b[a].toString,b[a],periodoftime); 
    } 
    
  • Lấy Array:

    for(a=0;a<b.length;a++){ 
        if(typeof b[a] === 'string'){ 
         b[a] = getCookie(b[a]) 
        }else{ 
         b[a] = getCookie(b[a].toString) 
        } 
    } 
    

Các lỗ hổng duy nhất là giá trị giống nhau không thể được lấy ra.

Không cần JQuery, phân tách bằng dấu phẩy hoặc JSON.

0

Tôi đã tạo cách này dễ dàng để tải cookie. Nó sẽ cung cấp cho lỗi nếu thực hiện ở đây, nhưng đó là chức năng

var arrayOfCookies = []; 
 
function parseCookieToArray() 
 
{ 
 
    var cookies  = document.cookie; 
 
    var arrayCookies = cookies.split(';'); 
 
    arrayCookies.map(function(originalValue){ 
 
     var name = originalValue.split('=')[0]; 
 
     var value = originalValue.split('=')[1]; 
 
     arrayOfCookies[name] = value; 
 
    }); 
 
} 
 
console.log(arrayOfCookies); //in my case get out: [language: 'en_US', country: 'brazil'] 
 
parseCookieToArray();

New mới của tôi obj để createget cookie

cookie = { 
    set: function(name, value) { 
     document.cookie = name+"="+value; 
    }, 
    get: function(name) { 
     cookies = document.cookie; 
     r = cookies.split(';').reduce(function(acc, item){ 
      let c = item.split('='); //'nome=Marcelindo' transform in Array[0] = 'nome', Array[1] = 'Marcelindo' 
      c[0] = c[0].replace(' ', ''); //remove white space from key cookie 
      acc[c[0]] = c[1]; //acc == accumulator, he accomulates all data, on ends, return to r variable 
      return acc; //here do not return to r variable, here return to accumulator 
     },[]); 
    } 
}; 
cookie.set('nome', 'Marcelindo'); 
cookie.get('nome'); 

Và xin lỗi cho người mới bắt đầu tiếng anh của tôi .

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