4

I have a simple array that I'm trying to JSON encode and set as a cookie. I am using the json2.js script to encode to JSON. I am using the following code to set the cookie:

jQuery(document).ready(function(){
    var ids = ['1', '2'];
    JSON.stringify(ids);
    setCookie(cookieName, ids, 1);
});

function setCookie(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=/";
}

After converting the array to JSON, and logging it in console, I get:

["1", "2"]

which is what I would expect. I then read out the cookie with the following function

function getCookie(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;
}

When I read out the cookie and log it in the console, I get:

1,2

suggesting that its a string and no longer a JSON encoded object. I would like to be able to set a cookie an a JSON encoded object, read it out and parse the JSON object, and finally perform operations on the data. My question is thus, how do you send a JSON encoded object to the cookie in such a way that I can parse it as JSON when I read it out?

Thanks as always!

3 Answers 3

5

Change this:

JSON.stringify(ids);
setCookie(cookieName, ids, 1);

To this:

var str = JSON.stringify(ids);
setCookie(cookieName, str, 1);
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you so much! That's why I ask these questions. After working on this for a while, I cannot see little issues like this.
2

I don't see you actually using the result of the JSON stringification:

jQuery(document).ready(function(){
    var ids = ['1', '2'];
    setCookie(cookieName, JSON.stringify(ids), 1);
});

Try this instead

1 Comment

+1 Thank you so much! Pretty obvious, eh? It's amazing I did not catch that.
2

Don’t use these cookie functions, they are flawed. setCookie fails to encode the name and value properly and getCookie fails for cookies with a common suffix (see my answer to Javascript getCookie functions).

For setCookie I would use this:

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

2 Comments

I implemented this function; however, since doing so, when I attempt to delete a cookie using setCookie(name,"",-1); it deletes only the value of the cookie, not the cookie entirely. Prior to changing it to your function, it would work as expected. Any thoughts? Thanks again!
I solved this by setting var expires = "; expires=Thu, 01-Jan-1970 00:00:01 GMT";

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.