使用JavaScript在Cookie中创建数组

问题描述 投票:22回答:8

是否可以使用数组创建cookie?

我想将a[0]='peter'a['1']='esther'a['2']='john'存储在JavaScript的cookie中。

javascript cookies
8个回答
47
投票
您可以在此topic中阅读:

您将jQuery.cookie插件和JSON结合使用,可以解决您的问题。

[要存储数组时,请在JS中创建一个数组,然后使用JSON.stringify将其转换为字符串并用$.cookie('name', 'array_string')存储

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

[当您要获取Cookie内的数组时,请使用$.cookie('name')来获取Cookie值,然后使用JSON.parse来从字符串中获取数组。

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


8
投票
Cookie只能容纳字符串。如果要模拟数组,则需要对其进行序列化和反序列化。

您可以使用JSON库执行此操作。


3
投票
我将

Script下面的代码添加到一个名为CookieMonster.js的javascript文件中(请参见以下代码)。

http://www.quirksmode.org/js/cookies.html中当前代码段的包装器>

它适用于数组和字符串,它将自动转义数组/字符串的逗号,和分号;(在原始代码段中未处理)。

我已经列出了内置的简单用法和一些奖励用法。

用法:

//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;.'

奖金:

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


1
投票
使用jQUery在cookie中创建数组吗?

1
投票
我同意其他评论-您不应该这样做,而应该使用JSON。但是,要回答您的问题,您可以通过将数组存储为逗号分隔的字符串来解决这个问题。假设您要将以下Javascript数组保存到Cookie中:

1
投票
我已经创建了这种简单的方法来获取Cookie。如果在这里执行,它将给出错误,但是可以正常使用

0
投票
对于该示例,您可以很容易地做到这一点:

0
投票
已添加到cookiemonster中删除
© www.soinside.com 2019 - 2024. All rights reserved.