我正在使用此行将多个键值对一次设置为一个cookie
document.cookie="username=John Smith; test1=ew; expires=Thu, 18 Dec 2013 12:00:00 GMT; path=/";
似乎test1
未成功设置为cookie,因为当我在控制台中编写document.cookie
时,它不会打印此键值对。任何人都知道如何将多个键值对设置为一个Cookie ?
答案 0 :(得分:38)
将多个键值对存储到一个cookie中是没有意义的,因为根据定义一个cookie代表一个键值对。
我相信你不太了解how document.cookie
works。它不是标准的JS字符串:当您设置它时,它包含的cookie定义追加到现有cookie列表。也就是说,您无法使用此API同时设置两个Cookie。
您有两种解决方案:
为您要存储的每个键值使用Cookie:
document.cookie = "myCookie=myValue";
document.cookie = "myOtherCookie=myOtherValue";
使用复杂数据的自定义序列化存储单个Cookie,例如JSON:
document.cookie = "myCookie=" + JSON.stringify({foo: 'bar', baz: 'poo'});
答案 1 :(得分:4)
实际上我认为使用
更好
document.cookie = "myCookie=foo='bar'&baz='poo'; here is the rest of cookie specifications if you like..."
据我所知,它也与服务器端的Asp
和Asp.Mvc
兼容:
string foo=Request.Cookies["myCookie"]["foo"]
答案 2 :(得分:0)
创建一个自定义对象,将该对象序列化为JSON字符串,并将序列化的字符串存储在cookie中
function setCookie()
{
var customObject = {};
customObject.name = document.getElementById("txtName").value;
customObject.email = document.getElementById("txtEmail").value;
customObject.gender = document.getElementById("txtGender").value;
var jsonString = JSON.stringify(customObject);
document.cookie = "cookieObject=" + jsonString;
}
JSON.stringify()
方法将JavaScript对象转换为JavaScript Object Notation(JSON)字符串。
我们可以在getCookie()
函数中获取值,如下所示。
function getCookie()
{
var nameValueArray = document.cookie.split("=");
var customObject = JSON.parse(nameValueArray[1]);
document.getElementById("txtName").value = customObject.name;
document.getElementById("txtEmail").value = customObject.email;
document.getElementById("txtGender").value = customObject.gender;
}
JSON.parse()
方法解析JSON字符串并返回相应的对象。