如何将多个键值对设置为一个cookie?

时间:2014-07-21 13:07:47

标签: javascript cookies

我正在使用此行将多个键值对一次设置为一个cookie

document.cookie="username=John Smith; test1=ew; expires=Thu, 18 Dec 2013 12:00:00 GMT; path=/";

似乎test1未成功设置为cookie,因为当我在控制台中编写document.cookie时,它不会打印此键值对。任何人都知道如何将多个键值对设置为一个Cookie

3 个答案:

答案 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..."
据我所知,它也与服务器端的AspAsp.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字符串并返回相应的对象。