Search code examples
javascriptobjectcookies

Pure Javascript - store object in cookie


No jQuery.

I want to store an object or array in a cookie.

The object should be usable after page refresh.

How do I do that with pure JavaScript? I read many posts, but do not know how to serialize appropriately.


EDIT: Code:

var instances = {};
...
instances[strInstanceId] = { container: oContainer };
...
instances[strInstanceId].plugin = oPlugin;
...
JSON.stringify(instances); 
// throws error 'TypeError: Converting circular structure to JSON'
  1. How do I serialize instances?

  2. How do I maintain functionality, but change structure of instance to be able to serialize with stringify?


Solution

  • Try that one to write

    function bake_cookie(name, value) {
      var cookie = [name, '=', JSON.stringify(value), '; domain=.', window.location.host.toString(), '; path=/;'].join('');
      document.cookie = cookie;
    }
    

    To read it take:

    function read_cookie(name) {
     var result = document.cookie.match(new RegExp(name + '=([^;]+)'));
     result && (result = JSON.parse(result[1]));
     return result;
    }
    

    To delete it take:

    function delete_cookie(name) {
      document.cookie = [name, '=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.', window.location.host.toString()].join('');
    }
    

    To serialize complex objects / instances, why not write a data dump function in your instance:

    function userConstructor(name, street, city) {
       // ... your code
       this.dumpData = function() {
         return {
            'userConstructorUser': {
                name: this.name,
                street: this.street,
                city: this.city
             }
           }
        }
    

    Then you dump the data, stringify it, write it to the cookie, and next time you want to use it just go:

      var mydata = JSON.parse(read_cookie('myinstances'));
      new userConstructor(mydata.name, mydata.street, mydata.city);